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

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

问题描述:

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

如何在Bash中做到这一点?

试试这个:

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

这部作品无论有多少个“点”或“点和空间”你有你的输入。它采用串后最后“点和空间”

+0

@sputnick不,这两者是不同的。我的作品是OP,你不是。 :) – Kent 2013-03-21 13:06:26

+0

是的。谢谢肯特! – 2013-03-21 13:08:51

+0

是的,编辑我的帖子只有awk,谢谢 – 2013-03-21 13:09:55

试试这个:

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

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

+1

-1分隔符是点空间,而不是点。这个答案会给你一个领先的空间。 – dogbane 2013-03-21 13:12:40

+0

你应该再次阅读这个问题(我在第一个例子中做同样的错误) – 2013-03-21 13:12:41

+0

啊,我错过了。 Thx – 2013-03-21 13:19:11

如果字符串是在一个变量:“”

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

如果有多个实例(如在我的例子),你想要的一切第一发生后,而不是最后,只需使用一个#

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

完美的是,如果您更详细地解释了'#'和'##'之间的区别,它会非常棒。 – razzak 2015-09-07 20:04:06

AWK是优雅的武器......一个更文明的时代:

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

在这种情况下,NF是“字段数”的awk变量,并且此构造说“在找到的最大字段数中打印条目”,所以如果输入大小从一行变为下一行,去获得最后一个。

你也可以做数学题:

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

(是的,这是迟到了OP 3年了,但我的牛orkers之一今天向我指出这个页面的东西,我们正在处理,所以我以为我会放在这里,以防其他人也在寻找。)