我有需要替换的所有文件的文件
带有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:一个或多个非空格字符。