在UNIX中使用sed命令中的否定

时间:2014-04-23 10:14:24

标签: unix sed

我是shell的新手,几天前开始学习它,我遇到了一个问题。我想使用sed命令来过滤文件。 首先,我想删除列表中不包含单词zad的所有文件 所以我这样做:

ls | sed '/[^{zad}]/d'

我不明白为什么这会从列表中删除所有文件?它是否删除了名称中不包含z,a或d的所有文件?

3 个答案:

答案 0 :(得分:4)

这可能适合你(GNU sed):

sed '/zad/!d' file

或:

sed -n '/zad/p' file

答案 1 :(得分:2)

/[^{zad}]/d删除包含至少一个不是{zad}之一的字符的每一行。对于每个行可能都是如此。

要删除包含zad的行,请使用/zad/d

$ cat in.txt 
foo
bar
zad
-- zad --
baz
$ sed '/zad/d' < in.txt
foo
bar
baz

如果要打印包含zad的行,请使用:

$ sed -n '/zad/p' < in.txt 
zad
-- zad --

-n不打印任何内容,p打印匹配的行。

答案 2 :(得分:0)

rm $( ls | sed '#n
/zad/!p' )

如果在他的名字中没有zad的非空文件夹,则失败(错误开启),因此可能使用-fr但请注意不要使用此类命令删除某个重要文件夹