快速查找大文本文件中的模式?

时间:2013-08-16 22:29:48

标签: linux bash unix

我有一个文件,其中有很多空格分隔的文本列。一栏看起来像这样 -  数字是3位或更多位数。例如< 234>,< 9473>等

例如

text.... text... <2329> text...
text.... text... <735> text...
text.... text... <23229> text...
text.... text... <2444> text...

我只想找到这些数字并使用bash打印或保存搜索结果。我该怎么做?

由于

我使用linux [L] ubuntu这样做。

3 个答案:

答案 0 :(得分:3)

这将在your_file中找到包含3位或更多位的所有行,然后输出数字

$ grep -P "<\d{3,}>" your_file | awk -F'[<> ]+' '{print $3}'

Regular expression visualization


鉴于此文件

text.... text... <1> text...
text.... text... <2329> text...
text.... text... <735> text...
text.... text... <23229> text...
text.... text... <2444> text...

输出

2329
735
23229
2444

答案 1 :(得分:3)

如果列#未修复,您只想捕获<>之间的数字,请使用:

awk -F '[<>]+' '{for (i=2; i<=NF; i+=2) if ($i ~ /^[0-9][0-9][0-9]+$/) print $i}' file

使用grep -P(perl regex):

grep -oP '(?<=<)\d{3,}(?=>)' file

答案 2 :(得分:1)

由于已经使用了grep和awk,你可以使用sed:)

sed -rn 's/.*<([0-9]{3,})>.*/\1/p' FILE