我有一个可能包含多个文件的文件夹。在这些文件中我有这样的文件:
和许多其他文件。只获得" dev.project.jar "我执行了:
ls | grep ^{{dev}}.*.jar$
这将显示包含其属性的文件。但是,我只想要文件名(仅文件名字符串)
如何纠正?
答案 0 :(得分:3)
ls
和grep
。 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