SED:如何使用&符号替换匹配模式中的字符(&)

时间:2012-10-02 16:40:29

标签: sed match ampersand

当我们使用sed匹配模式时,匹配的模式存储在“&符号”(&)变量中。有没有办法用&符号替换这个匹配模式中的字符?

例如,如果&包含字符串“apple1”,我该如何使用&将字符串设为“apple2”(即将1替换为2)?

4 个答案:

答案 0 :(得分:23)

如果我猜对了,你想要做的是在匹配的模式中应用替换。你不能使用&来做到这一点。你想这样做:

echo apple1 apple3 apple1 apple2 botemo1 | sed '/apple./ { s/apple1/apple2/g; }'

这意味着您只想在与模式/apple./匹配的行上执行命令替换。

答案 1 :(得分:16)

您也可以使用捕获组。捕获用于获取匹配的一部分并将其保存到辅助变量中,该变量按捕获出现的顺序以数字命名。

echo apple1 | sed -e 's/\(a\)\(p*\)\(le\)1/\1\2\32/g'

我们使用了三次捕获:

  1. 存储在\1中的第一个包含“a”
  2. 存储在\2中的第二个包含一系列“p”(在示例中包含“pp”)
  3. 存储在\3中的第三个包含序列“le”
  4. 现在我们可以使用我们捕获的匹配项打印替换项:\1\2\32。请注意,我们使用3个捕获值来生成“apple”,然后我们追加2.这不会被解释为变量\32,因为我们总共只能捕获9个。

    希望这有助于=)

答案 2 :(得分:10)

您可以先匹配模式,然后在匹配时更改文本:

echo "apple1" | sed '/apple/s/1/2/'    # gives you "apple2"

此代码在包含1的所有行中将2更改为apple

答案 3 :(得分:2)

这可能适合你(GNU sed和Bash):

sed 's/apple1/sed "s|1|2|" <<<"&"/e' file