我有一个字符串,它是另一个命令的输出。我只需要显示此字符串的结尾。分隔符字符串是“.
”(点和空格),我需要在“.
”的最后一个索引之后的字符串。
我怎样才能在Bash中执行此操作?
答案 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年,但我的一位牛犊今天指出我正在处理的这个页面,所以我想我会放弃这个,以防其他人看起来也是。)