[英]SED Replace after certain pattern - value in brackets
我有文件需要用AC (%blabla%+PAR)
替換AC %blabla%
所有 ocourences 。
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
有人可以幫我嗎?
謝謝你。
$ sed -E 's/(AC )([^ ]*)/\1(\2+PAR)/' ip.txt
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+PAR)
ROT: S 2 BLR (DimZ/2-29) BLL (DimZ/2-20) SPEED 20
CLA: L 133 A 64 AC (-1+PAR)
ROT: S 1 BLL (DimZ/2-29) BLR (DimZ/2+25) SPEED 20
BEN: L 11-0.5 AC (-90+PAR)
BEN: L 95 AC (1.5+PAR)
-E
啟用擴展正則表達式
-E
請使用sed 's/\\(AC \\)\\([^ ]*\\)/\\1(\\2+PAR)/'
(AC )
匹配並捕獲AC
后跟空格
( AC )
避免部分匹配或使用\\b(AC )
如果支持單詞邊界([^ ]*)
捕獲非空格字符\\1(\\2+PAR)
需要的輸出格式OP 的嘗試有什么問題:
"s/\\( AC"."\\)/\\1(/"
將被視為s/\\( AC
后跟.
后跟\\)/\\1(/
sed 's/\\( AC.\\)/\\1(/'
--> 除非需要雙引號,否則使用單引號\\( AC.\\)
將匹配空格后跟AC
后跟任何字符僅一次\\1(
會給你捕獲的部分,然后是(
您可以將以下符合 POSIX BRE 的正則表達式與sed
:
sed "s/\( AC \)\([^[:space:]]*\)/\1(\2+PAR)/" file
查看在線sed
演示
如果你有 GNU sed
,我建議
sed -E "s/\b(AC\s+)(\S+)/\1(\2+PAR)/" file
請參閱另一個演示。
正則表達式詳情
\\( AC \\)
- 第 1 組:空格、 AC
、空格(例如,與BAC
不匹配)\\([^[:space:]]*\\)
- 第 2 組:零個或多個非空白字符\\1(\\2+PAR)
- 替換是串聯的 Group 1 value + (
+ Group 2 value and +PAR)
。 GNU sed
正則表達式詳細信息
\\b
- 單詞邊界(AC\\s+)
- 第 1 組: AC
和一個或多個空格(\\S+)
- 第 2 組:一個或多個非空白字符。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.