使用grep和ls -a命令

Nic*_*ain 10 unix linux grep command ls

使用ls –agrep,如何使用单个grep命令列出/ usr中以字母p或字母r或字母s开头的所有文件的名称?

这是对的吗?

ls –a | grep [prs] /usr
Run Code Online (Sandbox Code Playgroud)

Ste*_*las 9

 ls -a /usr | grep '^[prs]'
Run Code Online (Sandbox Code Playgroud)

将从输出选择ls -a /usr(这是文件的列表中的/usr由换行字符分隔)由任一的开始的行prs字符。

那可能是您的老师所期望的,但这是错误的,或者至少是不可靠的。

文件名可以由多行组成,因为换行符与Linux或任何UNIX上文件名中的任何字符一样有效。这样的命令不会返回其名称开头的文件pqs,但与启动文件名的线条pqs。通常,您不能ls可靠地对输出进行后处理。

-a包括隐藏文件,即名称以开头的文件.。既然你只希望那些以pq或者s,这是多余的。

注意:

ls /usr | grep ^[pqs]
Run Code Online (Sandbox Code Playgroud)

会更加错误。首先^是在像Bourne shell的几个炮弹特殊字符rceszsh -o extendedglob(尽管在OK bash或其他POSIX弹)。

然后,在大多数shell中(fish作为一个显着的例外),[pqs]是一个遍历运算符。这意味着它将^[qps]由Shell扩展到与该模式匹配的文件列表(相对于当前目录)。

因此,在诸如此类的shell中bash,不要^特别对待,如果^p当前目录中有一个文件被调用,它将变成

ls /usr | grep ^p
Run Code Online (Sandbox Code Playgroud)

如果没有匹配的文件,在cshtcshzsh或者bash -O failglob,你会得到一个错误信息,该命令将被取消。在zsh -o extendedglob这里^是一个通配符操作,^[pqs]将意味着任何文件,但是pq还是s


And*_*ter 6

如果您要查找文件,请不要使用ls。使用find命令。

find /usr -name '[prs]*'
Run Code Online (Sandbox Code Playgroud)

如果您不想在/ usr下搜索整个树,请执行以下操作:

find /usr -maxdepth 1 -name '[prs]*'
Run Code Online (Sandbox Code Playgroud)