我是一名有用的助手,会将文本翻译成中文。
我正在尝试使用grep命令来查找仅包含数字的txt文件名,但我不知道grep是否适合此任务。
如果我的文件如下...
FILE1: 12324
FILE2: 12345q
FILE3: qqerxv
它应该只给我FILE1
的名称。
我尝试过grep -r -l [a-zA-Z]
,但那会给我相反的结果。
我应该使用什么模式?我应该怎么做才能匹配除数字外的所有文件?
如何匹配只包含数字的文件?
grep -r -L "[^0-9 ]" .
[^0-9 ]
将匹配任何不包含数字或空格的内容(否则将丢弃所有包含空格和数字的文件)。
-L
标志是--files-without-match
,因此这基本上会给您包含数字或空格的文件。
反转搜索比搜索包含[a-zA-Z]的文件要好得多,因为如果其中有任何其他特殊字符(_=+&...),则此搜索将中断。
顺便说一句,-r
标志将在当前目录中进行递归搜索。如果您只想搜索当前目录中的文件,建议删除-r
并将.
替换为*
或仅将其替换为要匹配的单个文件的名称。
\b([0-9])*\b
这将帮助您筛选出仅包含数字的行。cat data.txt | grep \b([0-9])*\b | cut -f 1 -d ":"
这里假定您已将文件名列表存储在文件data.txt
中。
grep
中使用的选项:
\b
-- 单词边界 [0-9]
-- 仅匹配数字()
-- 分组cut
中使用的选项:
f
-- 选择字段d
-- 指定分隔符grep
的参数不是选项。 - tripleee这些 awk
应该可以做到:
awk '!/[^0-9]/ {print FILENAME}' FILE*
awk '!/[a-zA-Z]/ {print FILENAME}' FILE*
FILE1
它将打印仅包含数字的文件中的所有 Filenames
[:digit:]
字符类比 0-9 更安全。然后您可以考虑处理read -r decimal_point thousands_sep < <(locale LC_NUMERIC)
,将其包含在模式中。 - Léa Gris