2014-03-05 187 views
0

在一个目录中,我有不同的文件名。 我在匹配模式时遇到问题。 我有前缀 'ABC',如下文件: abc123.10122013.txt abc254.10122013.txt abc542.54212013.txt 和文件前缀 '' ABCDEF”如下: abcdef321.10212013.txt abcdef321 .12222013.txt abcdef321.08252013.txtunix中的文件名匹配模式

在我的Korn shell脚本中,我基于前缀在for循环中执行一些操作。 所以发生了什么是有前缀的文件“ABCDEF”包括前缀“ABC” 这样做,因为我用像“ABC *”

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

所以IM规划通配符匹配“ABC”与直接ABC时3位数字 和abcdef与abc alphabates一样。 任何一个可以推荐一些好的方法来破解这个

回答

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-loop会从abc开始,接着是3个数字。第二个将挑选那些不遵循这种模式的人,大概abcdef。