是否可以使用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
答案 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附加文本,每个嵌入的换行前面都有一个 反斜杠。