繁体   English   中英

使用grep和ls -a命令

[英]Using grep and ls -a commands

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

这是对的吗?

ls –a | grep [prs] /usr
 ls -a /usr | grep '^[prs]'

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

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

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

-a是包含隐藏文件,即名称以...开头的文件. 由于您只需要以pqs开头的那些,这是多余的。

注意:

ls /usr | grep ^[pqs]

会更加错误。 First ^是一些shell中的特殊字符,如Bourne shell, rceszsh -o extendedglob (尽管在bash或其他POSIX shell中都可以)。

然后,在大多数炮弹中( fish是一个值得注意的例外), [pqs]是一个全局运算符。 这意味着^[qps]意味着由shell扩展到与该模式匹配的文件列表(相对于当前目录)。

所以在像bash这样的shell中没有特别处理^ ,如果在当前目录中有一个名为^p的文件,那将成为

ls /usr | grep ^p

如果没有匹配的文件,在cshtcshzshbash -O failglob ,您将收到一条错误消息,该命令将被取消。 zsh -o extendedglob^是一个globbing运算符, ^[pqs]表示除pqs任何文件。

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

find /usr -name '[prs]*'

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

find /usr -maxdepth 1 -name '[prs]*'

@twalberg的评论非常适合您提出的选项。 echo忽略隐藏文件,但是当您只想要以[prs]开头的文件时,这些文件将被过滤。
当你想要其他过滤器的隐藏文件时,类似的解决方案是ls -ad /usr/[prs]* ,其中-d选项会抑制子目录的列表。
该解决方案还将显示完整路径,当您首先转到目录时可以将其抑制。 如果要保留在当前目录中,请使用子shell。 当/ usr目录不存在时,我使用&&跳过ls。

(cd /usr && ls -ad [prs]*)

ls的目录,然后才应用grep 此外,您缺少^字符,只过滤掉以这些字母开头的文件:

$ ls -a /usr | grep ^[prs]

为什么不呢

 find /usr -type f -name '[prs]*'

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM