sed:是否有一个选项可以替换每行匹配的第N个和第M个匹配项?

问题描述:

我相信我在问模式标志。sed:是否有一个选项可以替换每行匹配的第N个和第M个匹配项?

我所熟悉的全球格局“g”标志

sed 's/pattern/sub/g'

而且我知道我可以通过使用一些替代比赛的第N次出现。

sed 's/pattern/sub/2'

但是假设我想替代线路上的第N个第m匹配。

实施例: 删除以下字符串的第三和第五字

输入:“一二三四五六”

输出:“一二四六”

+2

你可以用'echo'一二三四五六'对于给定的样本,切割-d''-f1-2,4,6-'...(注意你的措辞与样本不匹配)...使用'sed',你可以使用多个'sed'/ pattern /子/ 2' ; S /模式/子/ 3',但要小心的是'3'在第二子实际上是'4th'为第一子打掉了一个'pattern' – Sundeep

+0

我固定我的样本 – Kreganthus

这可能适用于您(GNU sed):

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

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

N.B.移除是颠倒的,即5和3,以便以前的移除不会影响下一个移除。

+0

我把它添加到我的sed脚本库.. 。 – SLePort