使用sed,您可以通过执行以下操作来替换所有匹配项:
sed 's/match/replace/g'
或者您可以通过执行以下操作来仅替换第N个匹配:
sed 's/match/replace/N'
然后将这两者结合起来有未指明的行为(但至少会替换Bash中的> = Nth匹配):
sed 's/match/replace/gN'
但有没有办法替换< =第N个匹配或特定范围的匹配(例如从N 1 到N 2 )?我需要像Perl这样的更好的东西吗?
答案 0 :(得分:0)
假设此输入文件:
aaaaaaaaaaaaaaaaaaaa
bbbbbbbbbbbbbbbbbbbb
现在试试这个:
sed '/a/{s/$/####/;:l;s/a/x/3;:t;tt;s/#//;tl}'
如果该行包含匹配项,请在该行的末尾添加一些字符串以用作计数器。开始循环并替换您感兴趣的第一个匹配项(在此示例中为第三个匹配项)。重置条件并从计数器中切断一个项目。如果有东西要切断,请重新启动循环,否则退出。
答案 1 :(得分:0)
将所有> = N匹配替换为空字节:
sed 's/match/\x00/gN'
用你的替换替换所有匹配(AKA all< N匹配以前):
sed 's/match/replace/g'
将所有空字节替换回原始匹配:
sed 's/\x00/match/g'