忽略除大写之外的所有字母

时间:2016-08-30 05:42:20

标签: regex awk sed grep

我有Johny-SmithJuarez-Hugo等输出,而我需要SH等。基本上,我需要最后一个大写字母字符串,那就是它。如果在任何内置的Linux工具(ex awk,sed,grep等)中都可以实现这一点,我们将不胜感激。

3 个答案:

答案 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}输出最后一个