找到排除"。"的所有命令。

时间:2014-08-24 19:00:34

标签: bash shell

到目前为止,我有这个:

ls /usr/bin | grep "^[\.]" 

cmd仍会获取带有“。”的文件。在那里。

我查看[[:punct:]]但仍然返回相同的内容。

6 个答案:

答案 0 :(得分:4)

排除事情grep -v。所以试试

ls /usr/bin | grep -v \\.

man grep

 -v, --invert-match
         Selected lines are those not matching any of the specified patterns.

答案 1 :(得分:4)

通常认为是bad idea to parse ls

如果我理解正确,您希望/usr/bin中名称中没有点的所有文件。您可以使用find执行此操作:

find /usr/bin -not -name "*.*"

使用!代替-not更具可移植性(thanks @Adrian):

find /usr/bin ! -name "*.*"

答案 2 :(得分:2)

不太清楚,你想要什么:

你的命令:

ls /usr/bin | grep "^[\.]" 

意思是,过滤ls的输出以仅显示文件,以点开头

grep "^[\.]" 
      ^ ^^ - escaped dot
      +- at the begining of the line

如果需要,请排除包含dot的所有文件,使用

ls /usr/bin | grep -v '\.' #or see HenrikN's answer and comments (grep -vF .)

你想要只排除以dot开头的条目,使用

grep '^[^\.]'

什么意思任何东西,但在开头点

Ps:无论如何,解析输出形式ls 通常是一个非常糟糕的主意。 (http://mywiki.wooledge.org/ParsingLs

答案 3 :(得分:1)

您可以更改正则表达式,以排除以"。":

开头的文件
ls -a /usr/bin | grep "^[^.]" 

此正则表达式仅选择没有"。"的文件。在开始时。顺便说一下,只有ls -a显示以"。"开头的文件。你是如何设法在没有" -a" ?

答案 4 :(得分:1)

如果启用了extglob shell选项,则可以使用纯bash实现。

shopt -s extglob
echo /usr/bin/!(*.*)
# or alternatively:
echo /usr/bin/+([!.])

如果要将列表管道连接到另一个命令行,可以将echo替换为ls -d

答案 5 :(得分:0)

我认为你指的是当前的工作目录和父目录,而不是带有"一个点"在它。

尝试这个,因为你可能有别名:

/ bin / ls / usr / bin