簡體   English   中英

用增量模式替換字符串中每次出現的模式

[英]Replace every occurrence of pattern in a string by an incremental pattern

我有很多這樣的輸入文件:

(((A:1,B:2)100:4,C:5)87:4,D:3);

我想用#1#2代替10087 因此,想法是每次模式)*:匹配時, *都會被增量字符串替換: #1#2 ...

到目前為止,我唯一想到的就是這個perl單行代碼: perl -ple 's/\\)*\\:/\\)$n++\\:/g' file但它提供了以下輸出:

(((A)++:1,B)++:2)100)++:4,C)++:5)87)++:4,D)++:3);

而且我看不到哪里錯了。

任何bashperl (或其他!)腳本將不勝感激!

謝謝!

您接近了:您需要將替換文本評估為perl表達式:

perl -pe 's/\).*?:/ ")#" . ++$n . ":" /ge' file
(((A:1,B:2)#1:4,C:5)#2:4,D:3);

或者,環顧四周

perl -pe 's/(?<=\)).*?(?=:)/ "#" . ++$n /ge' file
$ awk '{ while( sub(/)[0-9]+/,")#"++i) ); }1' file
(((A:1,B:2)#1:4,C:5)#2:4,D:3);

顯然nawk要求RE中的右括號必須轉義:

$ awk '{ while( sub(/\)[0-9]+/,")#"++i) ); }1' file

暫無
暫無

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

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