Regex 如何在grep中显示部分匹配图案?

Regex 如何在grep中显示部分匹配图案?,regex,perl,grep,Regex,Perl,Grep,我想从像“abc_12_1”这样的文本中提取12。我正在这样努力 echo "abc_12_1" | grep -Eo '[a-zA-Z]+_[0-9]+_1' abc_12_1 但我无法选择字符串中第一个uu后的数字,上面命令的输出是整个字符串。我正在寻找grep中的一些替代方案,我在下面的Perl模式匹配中找到了这些替代方案 perl -e '"abc_55_1" =~ m/[a-zA-Z]+_([0-9]+)_1/ ; print $1' 55 是否可以使用grep?一种方法是使用aw

我想从像“abc_12_1”这样的文本中提取12。我正在这样努力

echo "abc_12_1" | grep -Eo '[a-zA-Z]+_[0-9]+_1'
abc_12_1
但我无法选择字符串中第一个uu后的数字,上面命令的输出是整个字符串。我正在寻找grep中的一些替代方案,我在下面的Perl模式匹配中找到了这些替代方案

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

是否可以使用grep?

一种方法是使用
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

一种方法是使用
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

您可以使用
cut

cut -d_ -f2 <<< "abc_12_1"

两者都会产生
12

您可以使用
cut

cut -d_ -f2 <<< "abc_12_1"

使用
perl
,两者都会产生
12

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

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

$echo“abc_12_1”| grep-oP'(?使用
perl

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

grep -oP '(?<=_).*?(?=_)' <<< "abc_12_1"
$ echo "abc_12_1" | grep -oP '(?<=_)\d+(?=_)'
12
$echo“abc_12_1”| grep-oP'(?@Renjith Try
echo”| grep-oP'(?@Renjith Try
echo“|12_1”| grep-oP'(?@Renjith Try
echo”| grep-oP')?