列出当前目录中没有数字的文件名

时间:2019-05-11 23:51:59

标签: linux bash

我在练习中遇到麻烦。到目前为止,我得到了以下代码:

#!/bin/bash
for file in *.txt
do
  if grep -qv '[0-9]' $file; then
    echo "$file"
  fi
done

不幸的是没有成功。它列出了我所有的.txt文件。与标题中一样,我想检查目录中所有文件的内部,如果没有数字,则回显名称文件。

2 个答案:

答案 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

必须以这种方式编写第二个脚本才能正确处理空文件。