在命令行上使用模式匹配和模数

时间:2013-09-18 18:26:24

标签: regex ksh

我正在使用ksh模式匹配来过滤目录中的文件列表,如下所示。

fn="${file##*[!0-9]}"
if [[ -n $fn && $(( $fn % 2 )) -eq 0 ]]

是否可以在ls命令中的命令行上使用相同的模式匹配和模数运算符?

最终,我希望能够在单个循环语句中执行此操作。

for file in mail.sh*
do
done

1 个答案:

答案 0 :(得分:1)

如果你发布了更多你的例子,可能会更容易回答,但我会在这里猜测你正在尝试以偶数结尾的文件。

for file in *[02468]
do
    ...
done

或者,如果你想做比mod 2更复杂的事情,我会使用反引号和perl

for file in `perl -e 'join(" ",grep /(\d+)/ && $1 % 2 == 0 , glob "file*");'`
do
    ...
done

其中$1 % 2 == 0是您的示例算术表达式。 (老实说,我也会用perl编写你的整个脚本!)