[英]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
代替100
和87
。 因此,想法是每次模式)*:
匹配時, *
都會被增量字符串替換: #1
, #2
...
到目前為止,我唯一想到的就是這個perl單行代碼: perl -ple 's/\\)*\\:/\\)$n++\\:/g' file
但它提供了以下輸出:
(((A)++:1,B)++:2)100)++:4,C)++:5)87)++:4,D)++:3);
而且我看不到哪里錯了。
任何bash
或perl
(或其他!)腳本將不勝感激!
謝謝!
您接近了:您需要將替換文本評估為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.