使用ls –a和grep,如何使用单个grep命令列出/usr中以字母p或字母r或字母s开头的所有文件的名称?这样对吗
ls –a
grep
ls –a | grep [prs] /usr
字符串
ulydmbyx1#
ls -a /usr | grep '^[prs]'
字符串将从ls -a /usr的输出(/usr中由换行符分隔的文件列表)中选择以p、r或s字符开头的行。这可能是你的老师所期望的,但这是错误的,或者至少是不可靠的。文件名可以由许多行组成,因为换行符与Linux或任何UNIX上的文件名中的任何字符一样有效。因此该命令不会返回名称以p,q或s开头的文件,而是以p,q或s开头的文件名行。通常,你不能对ls的输出进行可靠的后处理。-a是包含隐藏文件,即名称以.开头的文件。由于您只需要以p,q或s开头的文件,因此这是多余的。请注意:
ls -a /usr
/usr
p
r
s
q
ls
-a
.
ls /usr | grep ^[pqs]
型首先^在一些shell中是一个特殊字符,比如Bourne shell,rc,es或zsh -o extendedglob(尽管在bash或其他POSIX shell中是可以的)。然后,在大多数shell中(fish是一个值得注意的例外),[pqs]是一个globbing操作符。这意味着^[qps]将由shell扩展到匹配该模式的文件列表(相对于当前目录)。因此,在像bash这样的shell中,如果在当前目录中有一个名为^p的文件,那么它将成为
^
rc
es
zsh -o extendedglob
bash
fish
[pqs]
^[qps]
^p
ls /usr | grep ^p
型如果在csh、tcsh、zsh或bash -O failglob中没有匹配的文件,您将收到一条错误消息,命令将被取消。在zsh -o extendedglob中,^是一个globbing运算符,^[pqs]将表示除p、q或s之外的任何文件。
csh
tcsh
zsh
bash -O failglob
^[pqs]
pkln4tw62#
如果你试图查找文件,不要使用ls。使用find命令。
find
find /usr -name '[prs]*'
字符串如果你不想搜索/usr下的整个树,那么可以这样做:
find /usr -maxdepth 1 -name '[prs]*'
型
agyaoht73#
@twalberg的评论非常适合您询问的选项。echo会忽略隐藏的文件,但当您只想要以[]开头的文件时,这些文件会被过滤。当您需要隐藏其他过滤器的文件时,一个类似的解决方案是ls -ad /usr/[prs]*,其中的-d选项将取消列出子目录。该解决方案还将显示完整的路径,这可以在您首先进入目录时被抑制。当您想留在当前目录时,请为其使用子shell。我使用&&在/usr目录不存在时跳过ls。
ls -ad /usr/[prs]*
(cd /usr && ls -ad [prs]*)
g6ll5ycj4#
我会ls目录,然后才应用grep。此外,您还缺少^字符,以便仅过滤出以这些字母开头的文件:
$ ls -a /usr | grep ^[prs]
laawzig25#
为什么不直接
find /usr -type f -name '[prs]*'
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
6条答案
按热度按时间ulydmbyx1#
字符串
将从
ls -a /usr
的输出(/usr
中由换行符分隔的文件列表)中选择以p
、r
或s
字符开头的行。这可能是你的老师所期望的,但这是错误的,或者至少是不可靠的。
文件名可以由许多行组成,因为换行符与Linux或任何UNIX上的文件名中的任何字符一样有效。因此该命令不会返回名称以
p
,q
或s
开头的文件,而是以p
,q
或s
开头的文件名行。通常,你不能对ls
的输出进行可靠的后处理。-a
是包含隐藏文件,即名称以.
开头的文件。由于您只需要以p
,q
或s
开头的文件,因此这是多余的。请注意:
型
首先
^
在一些shell中是一个特殊字符,比如Bourne shell,rc
,es
或zsh -o extendedglob
(尽管在bash
或其他POSIX shell中是可以的)。然后,在大多数shell中(
fish
是一个值得注意的例外),[pqs]
是一个globbing操作符。这意味着^[qps]
将由shell扩展到匹配该模式的文件列表(相对于当前目录)。因此,在像
bash
这样的shell中,如果在当前目录中有一个名为^p
的文件,那么它将成为型
如果在
csh
、tcsh
、zsh
或bash -O failglob
中没有匹配的文件,您将收到一条错误消息,命令将被取消。在zsh -o extendedglob
中,^
是一个globbing运算符,^[pqs]
将表示除p
、q
或s
之外的任何文件。pkln4tw62#
如果你试图查找文件,不要使用
ls
。使用find
命令。字符串
如果你不想搜索/usr下的整个树,那么可以这样做:
型
agyaoht73#
@twalberg的评论非常适合您询问的选项。echo会忽略隐藏的文件,但当您只想要以[]开头的文件时,这些文件会被过滤。
当您需要隐藏其他过滤器的文件时,一个类似的解决方案是
ls -ad /usr/[prs]*
,其中的-d选项将取消列出子目录。该解决方案还将显示完整的路径,这可以在您首先进入目录时被抑制。当您想留在当前目录时,请为其使用子shell。我使用&&在/usr目录不存在时跳过ls。
字符串
g6ll5ycj4#
我会
ls
目录,然后才应用grep
。此外,您还缺少^
字符,以便仅过滤出以这些字母开头的文件:字符串
laawzig25#
为什么不直接
字符串
yacmzcpb6#
我用我的CSV,我希望它也能帮助你。
字符串