bash 字符串提取

ica*_*pan 3 bash shell-script

我想从以下字符串的最后一部分中提取第二个字段:

foo_1.103.debug_xx.ver21-inc-1          --> string extracted "debug_xx"
foo_1.103.1.0.release_32_xx.ver21-inc-1 --> string extracted "release_32_xx"
foo_1.103.1.0.release_xx.ver21-inc-1    --> string extracted "release_xx"
Run Code Online (Sandbox Code Playgroud)

任何帮助将不胜感激。

man*_*ork 5

与纯bash

IFS='.' read -a p <<< 'foo_1.103.1.0.release_32_xx.ver21-inc-1'
echo "${p[${#p[@]}-2]}"
Run Code Online (Sandbox Code Playgroud)

您可以更轻松地使用awk

awk -F. '{print$(NF-1)}' <<< 'foo_1.103.1.0.release_32_xx.ver21-inc-1'
Run Code Online (Sandbox Code Playgroud)

如果您要解析的字符串是文件名,您仍然可以使用awk

awk -F. 'BEGIN{for(i=1;i<ARGC;i++){$0=ARGV[i];print$(NF-1)}}' foo*
Run Code Online (Sandbox Code Playgroud)

  • `+1` 以获得最佳答案。你的 `echo` 会更好:`echo "${p[@]:(-2):1}"`。 (2认同)