我是shell的新手,几天前开始学习它,我遇到了一个问题。我想使用sed命令来过滤文件。 首先,我想删除列表中不包含单词zad的所有文件 所以我这样做:
ls | sed '/[^{zad}]/d'
我不明白为什么这会从列表中删除所有文件?它是否删除了名称中不包含z,a或d的所有文件?
答案 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
但请注意不要使用此类命令删除某个重要文件夹