我有需要替换的所有文件的文件
带有AC %blabla%AC (%blabla%+PAR)

ROT: S 3    BL 3900   SPEED 20
    BEN: L 15

ROT: S 2    BLL (DimZ/2+25) BLR (DimZ/2-29) SPEED 20
    BEN: L 14-0.5 A 116  AC -1

 ROT: S 2   BLR (DimZ/2-29) BLL (DimZ/2-20) SPEED 20
     CLA: L 133 A 64    AC -1

ROT: S 1    BLL (DimZ/2-29) BLR (DimZ/2+25) SPEED 20
    BEN: L 11-0.5  AC -90
    BEN: L 95   AC 1.5
例如。:
之后AC -1应该是AC (-1+PAR)
之后AC 90应该是AC (90+PAR)
我尝试过的是:
sed "s/\( AC"."\)/\1(/"
但这并不总是添加“(” ...
我得到:
ROT: S 3    BL 3900   SPEED 20
    BEN: L 15

ROT: S 2    BLL (DimZ/2+25) BLR (DimZ/2-29) SPEED 20
    BEN: L 14-0.5 A 116  AC (-1

 ROT: S 2   BLR (DimZ/2-29) BLL (DimZ/2-20) SPEED 20
     CLA: L 133 A 64    AC -1

ROT: S 1    BLL (DimZ/2-29) BLR (DimZ/2+25) SPEED 20
    BEN: L 11-0.5  AC (-90
    BEN: L 95   AC (1.5
有人可以帮我吗?
谢谢。

最佳答案

您可以将以下符合POSIX BRE的正则表达式与sed一起使用:

sed "s/\( AC \)\([^[:space:]]*\)/\1(\2+PAR)/" file
online sed demo
如果您有GNU sed,我建议
sed -E "s/\b(AC\s+)(\S+)/\1(\2+PAR)/" file
参见another demo
正则表达式详细信息
  • \( AC \)-组1:空格,AC和空格(因此,例如BAC不匹配)
  • \([^[:space:]]*\)-组2:零个或多个非空格字符
  • \1(\2+PAR)-替换为串联的Group 1值+ ( + Group 2值和+PAR)

  • GNU sed正则表达式详细信息
  • \b-单词边界
  • (AC\s+)-组1:AC和一个或多个空格
  • (\S+)-组2:一个或多个非空格字符。
  • 07-24 09:39
    查看更多