簡體   English   中英

使用shell命令在模式中替換字符串:sed,awk

[英]replace string in pattern using shell command: sed, awk

說我有一個像這樣的文本文件:

a;bc;d;{a;b;cd}
ab;cde;f;{ab;c;defg}
ab;{a;b;cd};cde;f
...

我想用逗號替換花括號中的所有分號。 替換后將如下所示:

a;bc;d;{a,b,cd}
ab;cde;f;{ab,c,defg}
ab;{a,b,cd};cde;f
...

我應該如何在shell命令中執行此操作? sed,awk或其他...

Perl解救:

perl -pe 's/({.*?})/ $1 =~ s=;=,=gr /ge' input

問題是您的預期輸出錯誤:

a;b;cd         a;b;cd
  |               |
  V               V
a,b,c,d         ab,cd

通過使用正向預測的 perl,

$ perl -pe 's/;(?=[^{}]*})/,/g' file
a;bc;d;{a,b,cd}
ab;cde;f;{ab,c,defg}
ab;{a,b,cd};cde;f
sed ':a; s/\(.*\)\({\)\([^;]*\)\(;\)\([^}]*}.*\)/\1\2\3,\5/;t a' file

在開頭放置一個標簽,然后放開暫掛模式,然后循環,直到每行(ta)不再成功替換為止

E.g.  
a;bc;d;{a;b;cd}morestuff{bsdj;dsfkjl;sdkjl;kd}
ab;cde;f;{ab;c;defg}
ab;{a;b;cd};cde;f

Output: 
a;bc;d;{a,b,cd}morestuff{bsdj,dsfkjl,sdkjl,kd}
ab;cde;f;{ab,c,defg}
ab;{a,b,cd};cde;f

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM