在sed过滤器后使用匹配组

时间:2015-10-30 10:18:04

标签: regex sed

是否可以使用sed在以后的命令中重用匹配的模式?

我知道替换时有可能但我只是匹配。

这是我在尝试

时得到的
> printf "hello world\ngood bye cruel world\n" | sed -re '/(.*)world/a found: \1'
hello world
found: 1
good bye cruel world
found: 1

我想要打印

hello world
found: hello
good bye cruel world
found: good bye cruel

1 个答案:

答案 0 :(得分:2)

只是做一个替代!

$ sed -r 's/(.*)world/&\nfound: \1/' < <(printf "hello world\ngood by cruel world\n")
hello world
found: hello 
good by cruel world
found: good by cruel 

这会将world之前的内容捕获到\1中。然后,它将其替换为&,后跟新行和found: +捕获的组。

由于&保持匹配,因此会再次打印该行。

在此处查找有关s//命令的信息。来自man sed

  

接受地址范围的命令

     

<强> S /的regexp /更换/

     

尝试将regexp与模式空间匹配。如果成功,   替换与替换匹配的部分。替换可能   包含特殊字符&amp;指的是那部分   模式空间匹配,并特殊转义\ 1到\ 9到   参考正则表达式中相应的匹配子表达式。

然后,我们发现\a不允许我们使用\1&

  

零地址或单地址命令

     

** a **

     

text附加文本,每个嵌入的换行前面都有一个   反斜杠。