在连字符后获取字符串的最后一部分

Ste*_*ven 17 command-line sed awk string command

是否有一个简单的命令行来提取由连字符分隔的字符串的最后一部分?例如,我想123foo-bar-123.

jas*_*yan 32

您可以使用 Bash 的参数扩展

string="foo-bar-123" && printf "%s\n" "${string##*-}"
123
Run Code Online (Sandbox Code Playgroud)

如果你想使用另一个进程,用 awk:

echo "foo-bar-123" | awk -F- '{print $NF}'
Run Code Online (Sandbox Code Playgroud)

或者,如果您更喜欢 Sed:

echo "foo-bar-123" | sed 's/.*-//'
Run Code Online (Sandbox Code Playgroud)

正如格伦杰克曼所建议的那样,一个更轻松的外部过程是cut

cut -d- -f3 <<< "$string"
Run Code Online (Sandbox Code Playgroud)

  • @don_crissti,确实如此。一个*可以*做`rev &lt;&lt;&lt; "$string" | cut -d- -f1 | rev`,但随后我们偏离了 param.expansion 的简单性。 (2认同)