在分隔符后获取字符串的一部分

时间:2014-03-28 13:58:56

标签: bash shell parsing

字符串格式为

Executed: variable_name

获取* variable_name *子字符串的最简单方法是什么?

4 个答案:

答案 0 :(得分:1)

foo="Executed: variable_name"
echo ${foo##* }     # Strip everything up to and including the rightmost space.

set -- $foo
echo $2

与使用awk,sed和whatnot的其他解决方案不同,这些解决方案不会分叉其他程序并节省数千个CPU周期,因为它们完全在shell中执行。它们也更具可移植性(与${i/* /}不同,这是一种基础)。

答案 1 :(得分:0)

使用

echo "Executed: variable_name" | sed 's/[^:]*: //'

答案 2 :(得分:0)

使用awk:

echo 'Executed: variable_name' | awk -F' *: *' '{print $2}'
variable_name

答案 3 :(得分:0)

如果变量中包含字符串:

$ i="Executed: variable_name"
$ echo ${i/* /}
variable_name

如果您将字符串作为命令的输出

$ cmd
Executed: variable_name
$ cmd | awk '{print $NF}'
variable_name

请注意,“NF”表示“字段数”,因此$ NF始终是该行的最后一个字段。假设字段用空格分隔(除非指定了-F) 如果你的variable_name中可以包含空格,那么

-F' *: *'

前面提到的

确保只使用“:”作为字段分隔符。但是,如果存在空格,这将保留行尾的空格。

如果该行与其他输出混合在一起,则可能需要进行过滤。

要么是grep ..

$ cmd | grep '^Executed: ' | awk '{print $NF}'

或更聪明的awk ..

$ cmd | awk '/^Executed: /{print $NF}'