linux 使用grep和ls -a命令

jexiocij  于 5个月前  发布在  Linux
关注(0)|答案(6)|浏览(83)

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

ls –a | grep [prs] /usr

字符串

ulydmbyx

ulydmbyx1#

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

字符串
将从ls -a /usr的输出(/usr中由换行符分隔的文件列表)中选择以prs字符开头的行。
这可能是你的老师所期望的,但这是错误的,或者至少是不可靠的。
文件名可以由许多行组成,因为换行符与Linux或任何UNIX上的文件名中的任何字符一样有效。因此该命令不会返回名称以pqs开头的文件,而是以pqs开头的文件名行。通常,你不能对ls的输出进行可靠的后处理。
-a是包含隐藏文件,即名称以.开头的文件。由于您只需要以pqs开头的文件,因此这是多余的。
请注意:

ls /usr | grep ^[pqs]


首先^在一些shell中是一个特殊字符,比如Bourne shell,rceszsh -o extendedglob(尽管在bash或其他POSIX shell中是可以的)。
然后,在大多数shell中(fish是一个值得注意的例外),[pqs]是一个globbing操作符。这意味着^[qps]将由shell扩展到匹配该模式的文件列表(相对于当前目录)。
因此,在像bash这样的shell中,如果在当前目录中有一个名为^p的文件,那么它将成为

ls /usr | grep ^p


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

pkln4tw6

pkln4tw62#

如果你试图查找文件,不要使用ls。使用find命令。

find /usr -name '[prs]*'

字符串
如果你不想搜索/usr下的整个树,那么可以这样做:

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

agyaoht7

agyaoht73#

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

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

字符串

g6ll5ycj

g6ll5ycj4#

我会ls目录,然后才应用grep。此外,您还缺少^字符,以便仅过滤出以这些字母开头的文件:

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

字符串

laawzig2

laawzig25#

为什么不直接

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

字符串

yacmzcpb

yacmzcpb6#

我用我的CSV,我希望它也能帮助你。

$ bash
bash-4.4$ ls *.csv | grep '^[Kk][Ss]*'
output: list of files
Let's say, you want the count also of files and not just list them
bash-4.4$ ls *.csv | grep '^[Kk][Ss]*'|wc -l
output: 42
Let's say you want size of files
bash-4.4$ ls -ls

字符串

相关问题