如何使用grep查找仅包含数字的文件?

3

我是一名有用的助手,会将文本翻译成中文。

我正在尝试使用grep命令来查找仅包含数字的txt文件名,但我不知道grep是否适合此任务。

如果我的文件如下...

FILE1: 12324
FILE2: 12345q
FILE3: qqerxv

它应该只给我FILE1的名称。

我尝试过grep -r -l [a-zA-Z],但那会给我相反的结果。

我应该使用什么模式?我应该怎么做才能匹配除数字外的所有文件?

如何匹配只包含数字的文件?

3个回答

4

grep -r -L "[^0-9 ]" .

[^0-9 ]将匹配任何不包含数字或空格的内容(否则将丢弃所有包含空格和数字的文件)。

-L标志是--files-without-match,因此这基本上会给您包含数字或空格的文件。

反转搜索比搜索包含[a-zA-Z]的文件要好得多,因为如果其中有任何其他特殊字符(_=+&...),则此搜索将中断。

顺便说一句,-r标志将在当前目录中进行递归搜索。如果您只想搜索当前目录中的文件,建议删除-r并将.替换为*或仅将其替换为要匹配的单个文件的名称。


2
[:digit:] 字符类比 0-9 更安全。然后您可以考虑处理 read -r decimal_point thousands_sep < <(locale LC_NUMERIC),将其包含在模式中。 - Léa Gris
谢谢,这正是我需要的。我很感激! - ShamanWarrior

0
请使用正则表达式模式:\b([0-9])*\b 这将帮助您筛选出仅包含数字的行。
现在,要从上述输出中提取文件名,您可以使用`cut`命令,通过将`grep`命令的输出“管道”到`cut`命令,即:
cat data.txt | grep \b([0-9])*\b | cut -f 1 -d ":"

这里假定您已将文件名列表存储在文件data.txt中。

grep中使用的选项:

  • \b -- 单词边界
  • [0-9] -- 仅匹配数字
  • () -- 分组

cut中使用的选项:

  • f -- 选择字段
  • d -- 指定分隔符

cat命令 是无用的,它只能从 data.txt 中获取文本,而不是文件名 - tripleee
另外,grep 的参数不是选项。 - tripleee

0

这些 awk 应该可以做到:

awk '!/[^0-9]/ {print FILENAME}' FILE*
awk '!/[a-zA-Z]/ {print FILENAME}' FILE*
FILE1

它将打印仅包含数字的文件中的所有 Filenames


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接