Regex 如何用sed仅替换特定范围的正则表达式匹配?

Regex 如何用sed仅替换特定范围的正则表达式匹配?,regex,sed,Regex,Sed,使用sed,您可以通过执行以下操作替换所有匹配项: sed 's/match/replace/g' sed 's/match/replace/N' 或者,您可以通过执行以下操作仅替换第n个匹配项: sed 's/match/replace/g' sed 's/match/replace/N' 然后将这两者结合起来具有未指定的行为(但至少将替换Bash中>=n个匹配项): 但是有没有办法替换假设这个输入文件: aaaaaaaaaaaaaaaaaaaa bbbbbbbbbbbbbbbbbbb

使用sed,您可以通过执行以下操作替换所有匹配项:

sed 's/match/replace/g'
sed 's/match/replace/N'
或者,您可以通过执行以下操作仅替换第n个匹配项:

sed 's/match/replace/g'
sed 's/match/replace/N'
然后将这两者结合起来具有未指定的行为(但至少将替换Bash中>=n个匹配项):


但是有没有办法替换假设这个输入文件:

aaaaaaaaaaaaaaaaaaaa
bbbbbbbbbbbbbbbbbbbb
现在试试这个:

sed '/a/{s/$/####/;:l;s/a/x/3;:t;tt;s/#//;tl}'

如果该行包含匹配项,请在该行末尾添加一些字符串作为计数器。启动一个循环并替换您感兴趣的第一个匹配项(本例中为第三个)。重置条件并从计数器中删除一项。如果有东西要切断,请重新启动循环,否则退出。

假设此输入文件:

aaaaaaaaaaaaaaaaaaaa
bbbbbbbbbbbbbbbbbbbb
现在试试这个:

sed '/a/{s/$/####/;:l;s/a/x/3;:t;tt;s/#//;tl}'

如果该行包含匹配项,请在该行末尾添加一些字符串作为计数器。启动一个循环并替换您感兴趣的第一个匹配项(本例中为第三个)。重置条件并从计数器中删除一项。如果要切断某些内容,请重新启动循环,否则退出。

将所有>=N个匹配项替换为空字节:

sed's/match/\x00/gN'

将所有匹配项替换为替换项(即以前的所有
sed's/match/replace/g'

将所有空字节替换回原始匹配:


sed's/\x00/match/g'

将所有>=N个匹配项替换为空字节:

sed's/match/\x00/gN'

将所有匹配项替换为替换项(即以前的所有
sed's/match/replace/g'

将所有空字节替换回原始匹配:


sed's/\x00/match/g'

替换>=n个匹配项
取决于sed的实现,是否有此文档。。。不确定是否有任何正则表达式工具支持从N1到N2的
替换>=n个匹配项
取决于sed实现,是否有此文档。。。不确定是否有任何正则表达式工具支持从N1到N2的