我在练习中遇到麻烦。到目前为止,我得到了以下代码:
#!/bin/bash
for file in *.txt
do
if grep -qv '[0-9]' $file; then
echo "$file"
fi
done
不幸的是没有成功。它列出了我所有的.txt文件。与标题中一样,我想检查目录中所有文件的内部,如果没有数字,则回显名称文件。
答案 0 :(得分:1)
-v
使其与任何不包含数字的行匹配。如果一个文件甚至包含一个这样的行,则该文件将匹配。
使用-v
代替与!
的匹配:
for file in *.txt
do
if ! grep -q '[0-9]' "$file"; then
echo "$file"
fi
done
您还可以通过单个grep
调用来完成整个操作,并跳过循环。 -L
打印与模式不匹配的文件。
grep -L '[0-9]' *.txt
答案 1 :(得分:0)
对于下一个文件和ENDFILE,使用GNU awk:
awk '
/[0-9]/ { f=1; nextfile }
ENDFILE { if (!f) print FILENAME; f=0 }
' *.txt
任何awk:
awk '
/[0-9]/ { f[FILENAME] }
END { for (i=1; i<ARGC; i++) if ( !(ARGV[i] in f) ) print ARGV[i] }
' *.txt
必须以这种方式编写第二个脚本才能正确处理空文件。