我有一些文件需要替换所有出现的
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
如果你有 GNU sed
,我建议
sed -E "s/\b(AC\s+)(\S+)/\1(\2+PAR)/" file
参见another demo .
正则表达式详细信息
-
\( AC \)
- 第 1 组:空间,AC
、空格(例如,与BAC
不匹配) -
\([^[:space:]]*\)
- 第 2 组:零个或多个非空白字符 -
\1(\2+PAR)
- 替换为串联的第 1 组值 +(
+ 第 2 组值和+PAR)
.
GNU sed
正则表达式详细信息
-
\b
- 单词边界 -
(AC\s+)
- 第 1 组:AC
和一个或多个空格 -
(\S+)
- 第 2 组:一个或多个非空白字符。
关于regex - SED 在特定模式后替换 - 括号中的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63827651/