使用 sed 删除两个单词之间的所有内容?

使用 sed 删除两个单词之间的所有内容?

似乎不起作用

The next example would delete everything between "ONE" and "TWO:" 

#!/bin/sh
sed '
/ONE/ {
# append a line
    N
# search for TWO on the second line 
    /\n.*TWO/ {
# found it - now edit making one line
        s/ONE.*\n.*TWO/ONE TWO/
    }
}' file

我本来希望删除 1 到 2 之间的所有内容。我尝试使用文件包含的文件。

[user5@mailserver ~]$ cat file
ONE
hello
TWO

但输出就像

[user5@mailserver ~]$ ./test
ONE
hello
TWO

我原以为ONE TWO 我会努力使其正确,但无法做到。

答案1

这将完成工作

sed '/^ONE/,/TWO/{/^ONE/!{/TWO/!d}}' file

/^ONE/,/TWO/查看以ONEup 开头的第一行TWO

{/^ONE/!如果我的行不是以以下内容开头,请执行以下操作ONE

{/TWO/!d}}如果我的行不以TWOand开头,请执行以下操作delete

总结以上内容:

查找以ONEup 开头的所有内容TWO。运行另一项检查,这意味着找到与“ONE TWO”不匹配的所有内容and并删除其余内容。

答案2

我会用

sed 'N;N;s/ONE.*\n.*TWO/ONE TWO/' file

请注意这两个N操作将三行连接在一起以允许该s操作起作用。

(这也与你原来的例子很接近)。

相关内容