bash - sed 删除特定点,包括模式本身

标签 bash sed

我们有一个如下所示的字符串:

ash oak brock misty oak oak james oak jesse misty

我们需要删除上面字符串中直到第 n 个 oak 实例的所有内容,并删除模式本身。

因此,带有 1sed 将显示:

 brock misty oak oak james oak jesse misty

sed2 将显示:

 oak james oak jesse misty

sed3 将显示:

 james oak jesse misty

sed4 将显示:

 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/

相关文章:

linux - 没有尾部斜杠的目录列表 "/"

perl - 替换 perl 中一行中第 n 次出现后的所有出现

linux - sed:如何在文本 block 后插入行?

linux - bash 脚本 - 我想检查 XLS 是否为空。如果是,我什么都不想做。如果不是,我想做点什么

bash - 如何计算 Unix 文件中的所有空格

linux - 参数未传递给 shell 脚本 copyfile.sh : 1: copyfile. sh: [d: 未找到

arrays - SED 匹配/替换 URL 并更新序列化数组计数

linux - 在 AWK 生成的命令字符串中嵌入引号?

linux - 将多个 header 信息字段附加到文件,直到找到下一个 header

regex - 正则表达式中的召回值