我有一個字符串,它是另一個命令的輸出。我只需要顯示這個字符串的結尾。分隔符字符串是「.
」(點和空格),並且我需要最後一個索引「.
」之後的字符串。獲取字符串中最後一個子串索引後的字符
如何在Bash中做到這一點?
我有一個字符串,它是另一個命令的輸出。我只需要顯示這個字符串的結尾。分隔符字符串是「.
」(點和空格),並且我需要最後一個索引「.
」之後的字符串。獲取字符串中最後一個子串索引後的字符
如何在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