B[A-E]Z 怎样分别打印通配结果为:BAZ BBZ BCZ BDZ BEZ(shell 实现)
假定存在文件 BAZ001.ani BBZ001.ani BDZ001.ani BEZ001.ani
当ls B[A-E]Z* 列出文件时,缺少BCZ001.ani,但 ls B[A-E]Z*命令是执行成功的。
为了在后台判断每一文件的存在性我需要 B[A-E]Z 通配后的结果
(BAZ BBZ BCZ BDZ BEZ )分别生成文件,然后按行比较,看哪行是不同的
#!/bin/ksh
awk '
BEGIN {
for ( i=1; i<=255; ++i ) ord [i] = sprintf("%c",i);
for ( i=1; i<=255; ++i ) {
c="A" ord[i] "E"
if ( c ~ /A[A-Z]E/ ) {
print c
}
}
}
'
第一个for循环产生一个长度为255的数组,其内容为相应ascii值所对应的字符。
第二个for循环是生成"c"字符串变量,它的中间一个字符就是上面数组中的元素,if语句
打印出与A[A-Z]E通配的c字符串的值:AAE、ABE、ACE、ADE……