我们有一个如下所示的字符串:
ash oak brock misty oak oak james oak jesse misty
我们需要删除上面字符串中直到第 n 个 oak
实例的所有内容,并删除模式本身。
因此,带有 1
的 sed
将显示:
brock misty oak oak james oak jesse misty
sed
与 2
将显示:
oak james oak jesse misty
sed
与 3
将显示:
james oak jesse misty
sed
与 4
将显示:
jesse misty
我们使用 BSD sed
,但也可以使用 GNU sed
。谢谢
我们尝试了 sed $number',/^.*oak/{s/oak//}'
但这不起作用
最佳答案
这可能对你有用(GNU sed):
sed 'H;g;s/\n//g;s/oak/\n/2;/.*\n/{s///;:a;n;ba};d' file
将当前行追加到保留空间,然后用保留空间的内容替换当前行。删除所有换行符并用换行符替换所需字符串的出现。如果当前行包含换行符,则删除从当前行开头到引入的换行符的所有内容(包括引入的换行符),然后获取并打印文件的其余部分。否则删除当前行并重复。
关于bash - sed 删除特定点,包括模式本身,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59084337/