使用 GNU sed 在插入或附加的行中重用匹配的模式

Reuse matched pattern in inserted or appended line with GNU sed

我正在尝试使用 sed 在模式之前(或之后)插入(或附加)一行。

也许 awk 会更简单,但我不熟悉它。 这里是输入

bar

wow

hee

以及想要的输出:

bar
something
foobar

wow
something
foowow

hee
something
foohee

我用 GNU sed 尝试了以下操作:

sed '/^\(bar\|wow\|hee\)/a something\nfoo' input

但它打印了 1 而不是匹配的模式。 实际上,我想打印以 bar|wow|hee.

开头的整行

您可以像这样使用替换:

sed 's/^\(bar\|wow\|hee\)/&\n something\nfoo&/' input

这将用 self 替换已创建的模式,然后......然后再次 self。

awk 来拯救!

$ awk '/^(bar|wow|hee)$/{print [=10=] RS "something" RS "foo" [=10=] RS}'

sed 不仅可以搜索和替换:https://www.gnu.org/software/sed/manual/sed.html

sed '/^\(bar\|wow\|hee\)/ {
  p
  i\something
  s/^/foo/
}' file