我想从像“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?
我想从像“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?
使用perl
:
$ echo "abc_12_1" | perl -lne 'print /_(\d+)_/'
12
或者grep
:
$ echo "abc_12_1" | grep -oP '(?<=_)\d+(?=_)'
12
你可以使用cut
:
cut -d_ -f2 <<< "abc_12_1"
使用grep
:
grep -oP '(?<=_).*?(?=_)' <<< "abc_12_1"
双方将产生12
。
一种方法是使用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