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

use*_*321 17 sed match ampersand

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

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

Eli*_*les 23

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

echo apple1 apple3 apple1 apple2 botemo1 | sed '/apple./ { s/apple1/apple2/g; }'
Run Code Online (Sandbox Code Playgroud)

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


Jan*_*lho 17

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

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

我们使用了三个捕获:

  1. 存储在其中的第一个\1包含"a"
  2. 存储在其中的第二个\2包含一系列"p"(在示例中它包含"pp")
  3. 存储在其中的第三个\3包含序列"le"

现在我们可以使用我们捕获的匹配打印替换:\1\2\32.请注意,我们使用3个捕获值来生成"apple",然后我们追加一个2.这不会被解释为变量,\32因为我们总共只能捕获9个捕获.

希望这有助于=)


non*_*one 13

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

echo "apple1" | sed '/apple/s/1/2/'    # gives you "apple2"
Run Code Online (Sandbox Code Playgroud)

此代码更改12包含的所有行apple

  • 谢谢!读完这个答案后,我觉得我更了解`sed`. (3认同)