我有Johny-Smith
,Juarez-Hugo
等输出,而我需要S
,H
等。基本上,我需要最后一个大写字母字符串,那就是它。如果在任何内置的Linux工具(ex awk,sed,grep等)中都可以实现这一点,我们将不胜感激。
答案 0 :(得分:1)
你需要这样吗?
echo "Johny-Smith" | sed 's/^.*\([A-Z]\)[^A-Z]*$/\1/g'
<强>测试强>
$ echo "Johny-Smith-Hello Johny-Smith" | sed 's/.*\([A-Z]\)[^A-Z]*/\1/g'
S
答案 1 :(得分:1)
使用GNU grep
并且PCRE
选项可用
$ echo 'Johny-Smith' | grep -oP '.*\K[A-Z]'
S
$ echo 'Juarez-Hugo' | grep -oP '.*\K[A-Z]'
H
-o
仅打印匹配的部分-P
Perl正则表达式.*\K
积极的背后,不是输出的一部分[A-Z]
任何大写字符
使用perl
,请参阅perldoc了解命令行选项说明
$ # prints the string within captured group
$ echo 'Johny-Smith' | perl -lne 'print /.*([A-Z])/'
S
$ echo 'Juarez-Hugo' | perl -lne 'print /.*([A-Z])/'
H
答案 2 :(得分:0)
在Bash中:
$ var="Johny-Smith-Hello Johny-Smith"; var="${var//[^[:upper:]]/}";echo "${var: -1}"
S
${var//[^[:upper:]]/}
删除所有非大写字母字符echo ${var: -1}
输出最后一个