这似乎不起作用
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/
查看以ONE
up 开头的第一行TWO
{/^ONE/!
如果我的行不是以以下内容开头,请执行以下操作ONE
{/TWO/!d}}
如果我的行不以TWO
and开头,请执行以下操作delete
总结以上内容:
查找以ONE
up 开头的所有内容TWO
。运行另一项检查,这意味着找到与“ONE TWO”不匹配的所有内容and
并删除其余内容。
答案2
我会用
sed 'N;N;s/ONE.*\n.*TWO/ONE TWO/' file
请注意这两个N
操作将三行连接在一起以允许该s
操作起作用。
(这也与你原来的例子很接近)。