提问人:x2ffer12 提问时间:12/14/2022 最后编辑:brian d foyx2ffer12 更新时间:12/15/2022 访问量:121
如何获取字符串的最后 2 个字符,最后一个字符是 A 或 B,最后一个字符的第二个是 1-360?(正则表达式 GREP)
How to get the last 2 characters of a string with last character being A or B and second to the last character being 1-360? (REGEX GREP)
问:
我并不是每天都在使用正则表达式,而且我对此仍然很陌生。
例如,我有这些字符串,这是字符串的格式:
APPLE20B50A
APPLE30A 60B APPLE12B 5B APPLE360A360B 苹果56B
基本上,我想得到最后一个字母(A或B)和最后一个字母之前的数字(或字母后面的数字/数字之前的数字,也是A或B)。还有一种格式,如APPLE56B,中间没有数字+字母。
预期输出:
50A
60B
5B
360B
56B
我试过了,但它只输出最后 2 个字符:grep -o '.\{2\}$'
0A
0B
5B
0B
6B
显然,数字不是动态的。任何帮助将不胜感激。
答:
2赞
Dan Bonachea
12/14/2022
#1
试试这个:
cat input-file | perl -ne 'print "$1\n" if (m/([0-9]+[AB])$/)'
3赞
ikegami
12/14/2022
#2
grep -o
确实可以使用正确的模式
grep -oP '[0-9]+[AB]$'
使用 Perl,
perl -nle'print $& if /[0-9]+[AB]$/'
perl -nle'print for /([0-9]+[AB])$/'
在所有情况下,您都可以通过 STDIN 或通过将文件名作为参数传递来提供输入。
1赞
potong
12/14/2022
#3
这可能对你有用 (GNU grep):
grep -o '\(360\|3[0-5][0-9]\|[1-2][0-9][0-9]\|[1-9][0-9]\|[1-9]\)[AB]\>' file
这将在单独的行上打印每个值,从 到 。1A/1B
360A/360B
若要用空隔开这些值,请使用:
grep -o '\(360\|3[0-5][0-9]\|[1-2][0-9][0-9]\|[1-9][0-9]\|[1-9]\)[AB]\>' file |
paste -sd' '
评论