获取字符串中最后一个子串索引后的字符
我有一个字符串,它是另一个命令的输出。我只需要显示这个字符串的结尾。分隔符字符串是“.
”(点和空格),并且我需要最后一个索引“.
”之后的字符串。获取字符串中最后一个子串索引后的字符
如何在Bash中做到这一点?
试试这个:
your cmd...|sed 's/.*\. //'
这部作品无论有多少个“点”或“点和空间”你有你的输入。它采用串后最后“点和空间”
试试这个:
echo "This is a sentence. This is another sentence" | rev | cut -d "." -f1 | rev
的rev
反转输出。 -d
指定分隔符,将所有内容分解为字段。 -f
指定您要使用的字段。我们可以选择f1,因为我们调换了数据。我们不需要知道总共有多少个领域。我们只需要知道第一个。最后,我们再次反转,以正确的顺序重新排列。
-1分隔符是点空间,而不是点。这个答案会给你一个领先的空间。 – dogbane 2013-03-21 13:12:40
你应该再次阅读这个问题(我在第一个例子中做同样的错误) – 2013-03-21 13:12:41
啊,我错过了。 Thx – 2013-03-21 13:19:11
如果字符串是在一个变量:“”
$ foo="header. stuff. more stuff"
$ echo "${foo##*. }"
more stuff
如果有多个实例(如在我的例子),你想要的一切第一发生后,而不是最后,只需使用一个#
:
$ echo "${foo#*. }"
stuff. more stuff
完美的是,如果您更详细地解释了'#'和'##'之间的区别,它会非常棒。 – 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之一今天向我指出这个页面的东西,我们正在处理,所以我以为我会放在这里,以防其他人也在寻找。)
@sputnick不,这两者是不同的。我的作品是OP,你不是。 :) – Kent 2013-03-21 13:06:26
是的。谢谢肯特! – 2013-03-21 13:08:51
是的,编辑我的帖子只有awk,谢谢 – 2013-03-21 13:09:55