Sed gnu使用特殊字符删除模式匹配后的行部分
目标是使用sed仅返回FF扩展挖掘阻止程序每行的url,该程序将此格式用于其正则表达式行:Sed gnu使用特殊字符删除模式匹配后的行部分,sed,special-characters,Sed,Special Characters,目标是使用sed仅返回FF扩展挖掘阻止程序每行的url,该程序将此格式用于其正则表达式行: {"baseurl":"*://002.0x1f4b0.com/*", "suburl":"*://*/002.0x1f4b0.com/*"}, {"baseurl":"*://003.0x1f4b0.com/*", "suburl":"*://*/003.0x1f4b0.com/*"}, 结果应该是: 002.0x1f4b0.com 003.0x1f4b0.com 一种方法是将所有内容保留在subu
{"baseurl":"*://002.0x1f4b0.com/*", "suburl":"*://*/002.0x1f4b0.com/*"},
{"baseurl":"*://003.0x1f4b0.com/*", "suburl":"*://*/003.0x1f4b0.com/*"},
结果应该是:
002.0x1f4b0.com
003.0x1f4b0.com
一种方法是将所有内容保留在suburl:“*://*/
之后,然后删除/*”},
我发现,但特殊的字符是一个问题
这行不通:
sed -n -e s@^.*suburl":"*://*/@@g hosts
有人能告诉我如何标记字符串中的两个星号,以便正则表达式将它们视为文字字符,而不是通配符吗
编辑:
sed -n 's#.*://\*/\([^/]\+\)/.*#\1#p' hosts
不幸的是,这不起作用
关于字符替换,谢谢你指导我参考
我将搜索的字符串缩减为/*/并使用如下ASCII字符代码:
sed -n -e s@^.*\d047\d047\d042\d047@@g hosts
不幸的是,这没有输出对行的任何更改
我的假设是:
^.*something
指定行中最后一次出现“something”之前的所有内容
sed-n-es@search@@g
删除行中的“搜索”(替换为“无”)
因此,这一行:
sed-n-e s@^.*\d047\d047\d042\d047@@g主机
应该在每一行中输出/*/
之后的所有内容…除非它没有
那条线有什么不对
关于删除所有内容,包括第一次/第一次操作之后,是的,这也是需要的。这可能适合您(GNU-sed):
贪婪地匹配(匹配的最长字符串)所有字符(最多://*/
),然后是一组与/
不匹配的字符(称为\1
),然后是行的其余部分,并将其替换为组\1
注意:sed替换定界符是任意的,在这种情况下选择为
,以使模式匹配/
更容易。此外,替换命令左侧的字符*
可能被解释为元字符,表示前一个字符/组的零个或多个,因此被引用\*
以避免错误地使用此属性。最后,使用选项-n
在执行所有sed命令后关闭图案空间中所有内容的常规打印。替换命令上的p
标志在成功替换后打印图案空间,因此只有URL将出现在输出中,或者什么都没有。请查看手册:-您必须转义特殊字符,\*
。可能存在重复的
sed -n 's#.*://\*/\([^/]\+\)/.*#\1#p' file