2

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

例如。

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

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

谢谢

我正在使用 linux [L]ubuntu 执行此操作。

4

3 回答 3

3

如果列 # 不固定,并且您只想捕获之间的数字<>然后使用:

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

使用 grep -P (perl 正则表达式):

grep -oP '(?<=<)\d{3,}(?=>)' file
于 2013-08-16T22:40:20.313 回答
3

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

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

正则表达式可视化


鉴于此文件

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

输出

2329
735
23229
2444
于 2013-08-16T22:33:26.603 回答
1

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

sed -rn 's/.*<([0-9]{3,})>.*/\1/p' FILE
于 2013-08-16T22:43:53.343 回答