Sed gnu使用特殊字符删除模式匹配后的行部分

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

目标是使用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
一种方法是将所有内容保留在
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