Shell:显示文件夹的文件内容(ls),搜索文件名并显示它

时间:2018-02-09 15:15:53

标签: bash shell grep

我有一个可能包含多个文件的文件夹。在这些文件中我有这样的文件:

  • 的test.xml
  • Test.jar的
  • test.jarGENERATED
  • dev.project.jar
  • ...

和许多其他文件。只获得" dev.project.jar "我执行了:

ls | grep ^{{dev}}.*.jar$

这将显示包含其属性的文件。但是,我只想要文件名(仅文件名字符串)

如何纠正?

1 个答案:

答案 0 :(得分:3)

这里不需要

lsgrep。 shell将显示任何与通配符匹配的文件名:

echo dev.*.jar

(没有选项的ls dev.*.jar本身会做类似的事情;如果你看到的不仅仅是文件名,也许你已经愚蠢地定义了alias ls='ls -l'或类似的东西?)

grep的论点应该是正则表达式;您指定的内容将匹配{{dev}}而不是dev,但如果没有引用,您的shell可能会扩展大括号。正确的正则表达式是grep '^dev\..*\.jar$',其中单引号保护正则表达式不受任何shell扩展的影响,.匹配任何字符,*尽可能多地重复该字符。为了匹配文字点,我们反斜杠 - 逃避它。

只打印文件名很少有用;通常,你实际上想要像

这样的东西
for file in ./dev.*.jar; do
    echo "$file"
    : probably do more things with "$file"
done

虽然如果你想要的话,可能更喜欢printf而不是echo,这也可以避免循环:

printf '%s\n' dev.*.jar