假设您有一个具有多次出现相同子字符串的字符串,那么最好的一行将是用包含数学索引的另一个子字符串替换匹配吗?例如,假设您有以下字符串:This is a test.
,我们希望用X
和它们的索引替换is
的所有出现,使其类似于:ThX-0 X-1 a test.
对此有什么想法吗?
发布于 2020-02-14 08:37:07
Perl来救我!
echo 'This is a test.' | perl -pe 's/is/"X-" . $c++/ge'
-p
逐行读取输入,在其上运行代码并输出已处理的line.s///g
全局运行替换,即在其possible/e
的所有位置上将替换部分解释为代码并运行它。这里的代码在字符串.
上使用连接运算符X-
和$c
的值,同时将其增加一个.。
发布于 2020-02-14 08:41:28
awk
中的简单解决方案是:
awk '{while(sub(/[iI][Ss]/,"X-"count++)){a=""};count=""} 1' Input_file
或者按照anubhava先生的评论,添加以上代码的较短版本:
awk '{while(sub(/[iI][Ss]/,"X-"count++));count=""} 1' Input_file
简单的解释是,运行一个循环,直到找到一个替换,然后在其中几乎什么都不做:)最后打印行。
发布于 2020-02-14 09:00:38
这里有一个替代的gnu-awk一个班轮:
echo 'This is a test.' | awk -v RS='[iI][sS]' '{ORS = "X-" i++} 1'
ThX-0 X-1 a test.
若要重置每一行的计数器:
printf '%s\n%s\n' 'This is a test.' 'This is another this' |
awk -v RS='[iI][sS]' '/\n/{i=0} {ORS = "X-" i++} 1'
ThX-0 X-1 a test.
ThX-0 X-1 another thX-2
https://stackoverflow.com/questions/60230214
复制