我有一个字符串,它是另一个命令的输出。我只需要显示这个字符串的结尾。分隔符字符串是“ .
”(点和空格),我需要“ .
”的最后一个索引之后的字符串。
我怎样才能在 Bash 中做到这一点?
如果字符串在变量中:
$ foo="header. stuff. more stuff"
$ echo "${foo##*. }"
more stuff
如果有多个“。”实例(如我的示例),并且您想要第一次出现之后的所有内容,而不是最后一次,只需使用一个#
:
$ echo "${foo#*. }"
stuff. more stuff
试试这个:
your cmd...|sed 's/.*\. //'
无论您的输入中有多少“点”或“点和空格”,这都有效。它采用最后一个“点和空格”之后的字符串
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 年,但是我的一位同事今天将我指向了这个页面,因为我们正在做一些事情,所以我想我会把它放在这里以防其他人也在寻找。)
试试这个:
echo "This is a sentence. This is another sentence" | rev | cut -d "." -f1 | rev
rev
反转输出。指定分隔符,将-d
所有内容分解为字段。-f
指定要使用的字段。 我们可以选择f1,因为我们颠倒了数据。我们不需要知道总共有多少个字段。我们只需要知道第一个。最后,我们再次反转它,以正确的顺序放回它。