从字符串中获取子字符串的最后一个索引之后的字符

时间:2013-03-21 12:58:54

标签: linux bash unix

我有一个字符串,它是另一个命令的输出。我只需要显示此字符串的结尾。分隔符字符串是“.”(点和空格),我需要在“.”的最后一个索引之后的字符串。

我怎样才能在Bash中执行此操作?

4 个答案:

答案 0 :(得分:22)

如果字符串在变量中:

$ foo="header. stuff. more stuff"
$ echo "${foo##*. }"
more stuff

如果有多个“。”实例(如我的例子中所示)并且您希望在第一次之后发生一切,而不是最后一次,只需使用一个#

$ echo "${foo#*. }"
stuff. more stuff

答案 1 :(得分:18)

试试这个:

your cmd...|sed 's/.*\. //'

无论您的输入中有多少“点”或“点和空格”,这都有效。它采用最后“点和空格”

之后的字符串

答案 2 :(得分:7)

试试这个:

echo "This is a sentence. This is another sentence" | rev | cut -d "." -f1 | rev

rev会反转输出。 -d指定分隔符,将所有内容分解为字段。 -f指定您要使用的字段。我们可以选择f1,因为我们反转了数据。我们不需要知道总共有多少个字段。我们只需知道第一个。最后,我们再次对其进行反转,以正确的顺序将其恢复。

答案 3 :(得分:5)

Awk是优雅的武器......对于一个更文明的时代:

[cpetro01@h ~]$ echo "this. is. my. string. of. some. arbitrary. length" | awk -F'. ' ' { print $NF } '
length
[cpetro01@h ~]$ echo "this. is. my. string. of. some" | awk -F'. ' ' { print $NF } '   
some

在这种情况下,NF是"字段数"的awk变量。并且这个结构说"打印条目中找到的最大字段数"因此,如果您的输入大小从一行变为另一行,您仍然会获得最后一行。

你也可以做数学:

[cpetro01@h~]$ echo "this. is. my. string. of. some. arbitrary. length" | awk -F'. ' ' { print $(NF-2) } '
some
[cpetro01@h~]$ echo "this. is. my. string. of. some. arbitrary. length" | awk -F'. ' ' { print $(NF-3) } '
of
[cpetro01@h~]$

(是的,OP已经晚了3年,但我的一位牛犊今天指出我正在处理的这个页面,所以我想我会放弃这个,以防其他人看起来也是。)