【发布时间】:2018-07-30 04:22:13
【问题描述】:
目标是使用 sed 仅返回 FF 扩展 Mining Blocker 的每一行的 url,它使用这种格式的正则表达式行:
{"baseurl":"*://002.0x1f4b0.com/*", "suburl":"*://*/002.0x1f4b0.com/*"},
{"baseurl":"*://003.0x1f4b0.com/*", "suburl":"*://*/003.0x1f4b0.com/*"},
结果应该是:
002.0x1f4b0.com
003.0x1f4b0.com
一种方法是保留suburl":"*://*/ 之后的所有内容,然后删除每个出现的/*"},
我找到了https://unix.stackexchange.com/questions/24140/return-only-the-portion-of-a-line-after-a-matching-pattern,但特殊字符有问题。
这行不通:
sed -n -e s@^.*suburl":"*://*/@@g hosts
有人能告诉我如何标记字符串中的 2 个星号,以便正则表达式将它们视为文字字符,而不是通配符吗?
编辑:
sed -n 's#.*://\*/\([^/]\+\)/.*#\1#p' hosts
不幸的是,这不起作用。
关于字符替换,感谢您指导我参考参考资料。
我将搜索到的字符串缩减为 //*/ 并使用如下 ASCII 字符代码:
sed -n -e s@^.*\d047\d047\d042\d047@@g hosts
不幸的是,这并没有输出对行的任何更改。
我的假设是:
^.*something 指定所有内容,包括一行中最后一次出现的“某事”
sed -n -e s@search@@g 删除(替换为空)一行内的“搜索”
所以,这一行:
sed -n -e s@^.*\d047\d047\d042\d047@@g 主机
应该在每行中输出//*/ 之后的所有内容...除非它没有。
那行有什么问题?
关于删除所有内容,包括第一次/之后的第一次操作,是的,这也是需要的。
【问题讨论】:
-
看看手册:gnu.org/software/sed/manual/sed.html#Escapes - 你必须转义特殊字符,
\*。