Shell脚本迭代文件名中只有一个'4'的文件

时间:2012-02-24 00:04:53

标签: shell

我正在尝试遍历同一目录中的文件,其中只有一个4。

这是我到目前为止所拥有的。我当前脚本的问题是选择任意数量为4的文件,而不是只有一个4的文件。

for i in *4*.cpp;
do

...

类似[!4],但任意数量的非4个字符。 * HTTP://www.tuxfiles.org/linuxhelp/wildcards.html

我想迭代文件名,例如me4.cpp,4.cpp和hi4hi.cpp

我想忽略文件名,例如lala.cpp,44.cpp,4hi4.cpp

谢谢!

想出来。我心血来潮地尝试了[!4] *。 哎呀原来我没有。这被解释为([!4])然后(*)

3 个答案:

答案 0 :(得分:3)

您需要的grep样式正则表达式是:

^[^4]*4[^4]*$

线路开始后的一堆4号线,4号线,以及另一组4号线不到4号线。

在纯shell中,请考虑使用case语句:

 for file in *4*.cpp
 do
     case "$file" in
     (*4*4*) : Ignore;;
     (*)     : Process;;
     esac
 done

查找包含4个的名称,然后忽略包含2个或更多4个的名称。

答案 1 :(得分:0)

如何使用find

find ./ -regex "<regular expression>"

答案 2 :(得分:0)

假设bash:

shopt -s extglob
for file in *([^4])4*([^4]).cpp; ...

其中*([^4])表示零个或多个不是“4”的字符