使用sed
我read,您可以替换从第二个
您可以将数字与g(全局)标志组合在一起。例如,如果你愿意的话 单独保留第一个单词,但将第二个,第三个等更改为DELETED 相反,使用/ 2g:
例如
sed 's/foo/bar/2g' a.txt
但是你怎么能在第二个匹配到匹配,以便第三个,第四个等不受影响?像
这样的东西sed 's/foo/bar/1-2' a.txt
答案 0 :(得分:2)
这可能适合你(GNU sed):
sed 's/foo/&\n/2;T;h;s//bar/g;G;s/\n.*\n//' file
替换目标字符串的第n个出现位置和换行符。 如果替换失败,则将模式空间(PS)复制到保留空间(HS)。 使用替换字符串进行替换,然后使用更改的行重新构建原始行。
此外:
sed 's/foo/\n/g;s/\n/foo/3g;s/\n/bar/g' file
使用nth +1而不是1到nth
答案 1 :(得分:0)
最简单的方法是:
sed 's/foo/bar; s/foo/bar' a.txt
这将有效地替换foo
的第2次出现。它每行进行两次传递,总是替换第一次出现。由于在第二次传递时第一次foo
已被替换,第二次传递'看到'原始第二次出现为第一次。
答案 2 :(得分:0)
延伸Chirlo的答案......
replace_string=s/foo/bar
n=2
replace_string_n=`python -c 'print "'$replace_string';"*'$n`
sed $replace_string_n a.txt