有没有办法在bash中删除除TWO模式之外的所有内容?
我知道我可以使用
删除除模式之外的所有内容sed '/pattern/!d'
但是我正在寻找一种方法来删除除了两种模式之外的所有模式......就像这样
sed '/pattern1 and pattern2/!d'
我不知道该怎么做。
顺便说一句。我正在尝试删除除< ..>之外的所有内容和< ..>:
感谢您的帮助。
答案 0 :(得分:1)
您要删除所有不包含pattern1
或 pattern2
的行。为此使用正确的OR。
$ cat in.txt
foo
bar
baz
qux
$ sed '/foo\|bar/!d' < in.txt
foo
bar
答案 1 :(得分:1)
更好地回答我之前的情况。假设您的模式位于grep
并且您的输出位于in.txt
out.txt
执行此任务
grep -E -o '(pattern1|pattern2) in.txt > out.txt'
E
用于扩展正则表达式,o
仅用于显示匹配模式。
答案 2 :(得分:1)
而不是!d
您可以使用-n
和p
命令:
sed -n '/pattern1/p; /pattern2/p'
除GNU sed之外的其他seds也适用...
答案 3 :(得分:1)
您可以使用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
位于行首时才打印,您可以使用^
,这意味着只打印那些以你的模式。