如何显示的grep匹配模式的一部分?(How to display part of matched

2019-10-19 19:44发布

我想从像“abc_12_1”一文中提取12。 我想是这样

echo "abc_12_1" | grep -Eo '[a-zA-Z]+_[0-9]+_1'
abc_12_1

但是我不能够第一_字符串后,选择数字,上述命令的输出是整个字符串。 我要寻找一个在grep的一些替代我在下面的Perl模式匹配。

perl -e '"abc_55_1" =~ m/[a-zA-Z]+_([0-9]+)_1/ ; print $1'
55

是否有可能使用grep?

Answer 1:

使用perl

$ echo "abc_12_1" | perl -lne 'print /_(\d+)_/'
12

或者grep

$ echo "abc_12_1" | grep -oP '(?<=_)\d+(?=_)'
12


Answer 2:

你可以使用cut

cut -d_ -f2 <<< "abc_12_1"

使用grep

grep -oP '(?<=_).*?(?=_)' <<< "abc_12_1"

双方将产生12



Answer 3:

一种方法是使用awk

echo "abc_12_1" | awk -F_ '{print $2}'
12

或者grep

echo "abc_12_1" | grep -o "[0-9][0-9]"
12

使用grep具有扩展的正则表达式

grep -oE "[0-9]{2}"     # Get only hits with two digits
grep -oE "[0-9]{2,}"    # Get hits with two or more digits


文章来源: How to display part of matched pattern in grep?
标签: regex perl grep