到目前为止,我有这个:
ls /usr/bin | grep "^[\.]"
cmd仍会获取带有“。”的文件。在那里。
我查看[[:punct:]]但仍然返回相同的内容。
答案 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