我想从“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?
答案 0 :(得分:3)
使用perl
:
$ echo "abc_12_1" | perl -lne 'print /_(\d+)_/'
12
或grep
:
$ echo "abc_12_1" | grep -oP '(?<=_)\d+(?=_)'
12
答案 1 :(得分:2)
您可以使用cut
:
cut -d_ -f2 <<< "abc_12_1"
使用grep
:
grep -oP '(?<=_).*?(?=_)' <<< "abc_12_1"
两者都会产生12
。
答案 2 :(得分:1)
一种方法是使用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