unix中的文件名模式匹配

时间:2014-03-05 18:16:37

标签: unix ksh

在目录中,我有不同的文件名。 我在匹配模式方面面临问题。 我有前缀'abc'的文件如下: abc123.10122013.txt abc254.10122013.txt abc542.54212013.txt  和前缀为''abcdef'的文件如下: abcdef321.10212013.txt abcdef321.12222013.txt abcdef321.08252013.txt

在我的Korn shell脚本中,我正在基于前缀在for循环中进行一些操作。 所以发生了什么是前缀'abc'时包含前缀'abcdef'的文件 因为我使用像'abc *'

这样的通配符
while read base 
do
for file in $(ls "${base}"* | sort | head -4 )
do 
compress $file
done
done <xyz

因此,我计划将'abc'与abc匹配,并立即使用3位数字 与abc alphabates一样abcdef。 任何人都可以建议一些好方法来破解这个

1 个答案:

答案 0 :(得分:0)

尝试使用grep

PATT="abc[0-9]\{3\}"
for file in $(ls "${base}"* | sort | grep ${PATT} | head -n) do ... done

对于abcdef文件(假设这是你期望的唯一其他模式):

PATT="abc[0-9]\{3\}"
for file in $(ls "${base}"* | sort | grep -v ${PATT} | head -n) do ... done

第一个for循环将选择以abc开头,后跟3个数字的文件。第二个会选择那些不遵循这种模式的人,大概是abcdef。