sed:是否可以选择替换每行匹配项的第 N 和第 M 次出现?

sed: Is there an option to substitute the Nth AND Mth occurrence of a match per line?

我想我问的是模式标志。

我熟悉全局模式​​标志'g'

sed 's/pattern/sub/g'

而且我知道我可以用数字替换匹配项的第 N 次出现。

sed 's/pattern/sub/2'

但假设我想替换一行中的第 N 个和第 M 个匹配项。

示例: 去掉下面字符串的第3个和第5个字

输入: "one two three four five six"

输出: "one two four six"

这可能适合您 (GNU sed):

sed -r 's/\S+\s*//5;s///3' file

这将删除第五个,然后是第三个非间隔字符,然后是可能的间隔字符组。

N.B。移除是相反的,即 5 然后是 3,这样前一个移除不会影响下一个。