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

在UNIX中的sed命令中使用否定,unix,sed,Unix,Sed,我是壳牌公司的新手,几天前开始学习,遇到了一个问题。我想使用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这个词的文件 所以我这样做:

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
-n
不打印任何内容,
p
打印匹配行。

这可能适用于您(GNU-sed):

或:


如果有一个非空文件夹的名称中没有zad,则失败(错误开启),因此可以使用
-fr
,但请小心不要使用此类命令删除某些重要文件夹

我的问题是,如何对整个字符串使用否定,因此,它将删除所有名称中没有zad这个词的文件。我确实理解你写的所有内容,谢谢你。但是我想删除所有不包含zad这个词的文件。我想用否定来做这个。所以我想以某种方式否定这个语句sed'/zad/p',所以它类似于sed'/(否定)zad/d'。另一种说法:
sed'/zad/!d'
毫无理由地拥有一个-1总是令人感兴趣的。这像回答一样愚蠢吗?顺便说一句,这是对完整请求的唯一回复,而不仅仅是sed部分。。。
$ sed -n '/zad/p' < in.txt 
zad
-- zad --
sed '/zad/!d' file
sed -n '/zad/p' file
rm $( ls | sed '#n
/zad/!p' )