我是 shell 新手,几天前开始学习它,但遇到了一个问题。我想使用 sed 命令来过滤文件。
首先,我想从列表中删除所有不包含单词 zad 的文件
所以我这样做:
ls | sed '/[^{zad}]/d'
我不明白为什么这会从列表中删除所有文件?它会删除名称中不包含 z、a 或 d 的所有文件吗?
最佳答案
/[^{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
打印匹配的行。关于unix - 在 UNIX 中的 sed 命令中使用否定,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23241280/