2013-02-04 25 views
1

我想列出用grep在CWD所有的可执行文件,我用了以下内容:列表中CWD所有可执行文件使用grep

ls -F -a | grep "[*]$" 

和它的作品,但为什么不下面的命令工作?它应该是等价的:

ls -F -a | grep -E "[*]\>" 

奇怪的是,如果我用一个标准的字符作为结尾的字母(如grep -E“[1]>”),它工作得很好

+1

只需编辑您的问题 – Michael

+0

'ls -a | grep“[*] $”'工作?你确定?你有'alias ls = ...'对吗?你的问题也不清楚,'可执行文件'为谁?所有者?用户?组?? – Kent

+0

对不起,我忘了-F国旗:) – user1417683

回答

1
ls -F | grep -E "[*]\>" 

这不会做你期待什么,因为*是不是一个“字”的字符,寻找结束字的边界是没有意义之后。

ls -F -a | grep "[*]$" 

将按照指定产生所有以*结尾的行。这是有道理的。

您应该注意@Adam's advice:您不应该分析ls的输出。

+0

在Zsh,我只是'echo *(*)':) – Johnsyweb

+0

谢谢:)亚当的建议当然是比解析“ls”更好的选择,但它doens回答我的问题。你的回答正是我想知道的。 – user1417683

5

可以使用find工具,这比解析ls的输出更健壮。

例如列出当前目录中的文件,并为用户设置执行位。

find . -maxdepth 1 -type f -perm -u=x 
+1

'find。 -type f -perm -u = x -depth 1'在当前目录中查找常规可执行文件(并且不会更深入)。 – Johnsyweb

+0

嗯它的工作原理,但我必须使用ls和grep。我的问题是,为什么没有像“*。\”这样的特殊字符在正则表达式中的“\>”之前工作? – user1417683

+0

@Johnsyweb谢谢,更新的答案,虽然不能让你的例子用-depth 1工作,但用maxdepth代替。 – Adam

相关问题