Sed 删除除两个模式以外的所有内容

Sed 删除除两个模式以外的所有内容,sed,Sed,有没有办法删除bash中除了两个模式以外的所有模式 我知道我可以删除所有内容,但不能使用 sed '/pattern/!d' 但我正在寻找一种方法,删除除两种模式以外的所有模式。。。像这样的 sed '/pattern1 and pattern2/!d' 我不知道怎么做 顺便说一句,我正在尝试删除所有内容,但: 谢谢您的帮助。您想删除所有不包含pattern1或pattern2的行。为此,请使用适当的或 $ cat in.txt foo bar baz qux $ sed '/foo\|ba

有没有办法删除bash中除了两个模式以外的所有模式

我知道我可以删除所有内容,但不能使用

sed '/pattern/!d'
但我正在寻找一种方法,删除除两种模式以外的所有模式。。。像这样的

sed '/pattern1 and pattern2/!d'
我不知道怎么做

顺便说一句,我正在尝试删除所有内容,但:


谢谢您的帮助。

您想删除所有不包含
pattern1
pattern2
的行。为此,请使用适当的或

$ cat in.txt
foo
bar
baz
qux
$ sed '/foo\|bar/!d' < in.txt
foo
bar
$cat in.txt
福
酒吧
巴兹
库克斯
$sed'/foo\| bar/!d'
您想删除所有不包含
pattern1
pattern2
的行。为此,请使用适当的或

$ cat in.txt
foo
bar
baz
qux
$ sed '/foo\|bar/!d' < in.txt
foo
bar
$cat in.txt
福
酒吧
巴兹
库克斯
$sed'/foo\| bar/!d'
更好地回答了我之前的问题。您可以使用
grep
执行此任务,前提是您的模式位于
in.txt
中,并且您的输出位于
out.txt

grep -E -o '(pattern1|pattern2) in.txt > out.txt' 

E
用于扩展正则表达式,
o
仅显示匹配模式

更好地回答了我以前的问题。您可以使用
grep
执行此任务,前提是您的模式位于
in.txt
中,并且您的输出位于
out.txt

grep -E -o '(pattern1|pattern2) in.txt > out.txt' 

E
用于扩展正则表达式,
o
仅显示匹配模式

而不是
!d
您可以使用
-n
p
命令:

sed -n '/pattern1/p; /pattern2/p' 

它还应该与GNU-sed以外的sed一起工作…

而不是
!d
您可以使用
-n
p
命令:

sed -n '/pattern1/p; /pattern2/p' 

除了GNU sed之外,它还可以用于sed…

您可以使用
awk
sed
进行此操作

$ cat file
foo
bar
baz
qux
$ sed -n '/foo\|bar/p' file
foo
bar
$ awk '/foo|bar/' file
foo
bar

上面将打印包含
foo
bar
的任何行。例如,如果您希望更具体一些,仅当
foo
bar
位于行首时才打印,则可以使用
^
,这意味着仅打印以图案开头的图案

您可以使用
awk
sed
执行此操作

$ cat file
foo
bar
baz
qux
$ sed -n '/foo\|bar/p' file
foo
bar
$ awk '/foo|bar/' file
foo
bar
上面将打印包含
foo
bar
的任何行。例如,如果您希望更具体一些,仅当
foo
bar
位于行首时才打印,则可以使用
^
,这意味着仅打印以图案开头的图案