我不经常这样做,而且当我这样做时,总是很敏感。我有下面的 sed 脚本,它从超过一百万个文件中提取数字模式。我需要将它发送到 AWK,因此当找到匹配的模式时,它会打印找到它的文件名。行号会很好,但不要贪心。
期望的输出
文件名1 000-323423-33
文件名2 000-323423-33
文件名3 000-323423-33
我尝试了各种方法,但没有任何效果,有经验的人可以提供适当的指导吗?先感谢您!
#!/bin/sh
#shopt -s nullglob
FILES=/mnt/c/temp/1/*.txt
for f in $FILES
do
echo "Processing $f"
sed -nr \
-e '/[0-9]{3}-[0-9]{6}-[0-9]{2}/{
s/.*([0-9]{3}\-[0-9]{6}\-[0-9]{2}).*/\1/
G
p
}' $f
done
看来你的任务就是
grep
在做什么。如果您真的不想要冒号,请使用空格替换它们tr
,假设文件名中不存在冒号。输出将如下所示:
@thanasisp 是对的,
grep
非常适合这份工作。使用 awk,您可以编写
参考:https ://www.gnu.org/software/gawk/manual/html_node/String-Functions.html
有了这么多文件,您可能会收到“参数列表太长”的错误。那是你需要的时候
find