2017-06-19 48 views
1

在Linux中,我有一個字符串/abc/xyz/def/xyz/1234/lmn/xyz/7890/uvw在shell腳本中最後一次出現單詞之前獲取子串

我想使用shell腳本在最後一次出現字符串xyz之前提取子串。

例子:

輸入:

/abc/xyz/def/xyz/1234/lmn/xyz/7890/uvw 

輸出:

/abc/xyz/def/xyz/1234/lmn 

我在網上搜索,並有單字符分隔符的解決方案,但我無法弄清楚如何獲得它使用像xyz這樣的字符串分隔符。

+0

根據你的描述,子字符串應該以'lmn /'結尾,包括最後一個正斜槓,但是這個例子不包含它。哪一個? –

+0

@benjaminW感謝您的時間。我正在尋找沒有斜槓的子字符串。 –

回答

2

如何:

$ x=/abc/xyz/def/xyz/1234/lmn/xyz/7890/uvw 
$ echo ${x%xyz*} 
$ echo ${x%/xyz*} 

如果你真的不想最後xyz/,那麼第二回聲應該是你要找的內容;如果離開尾隨/是可以接受的,那麼第一個就是這樣。

+0

感謝您的幫助。這工作。我需要沒有斜槓的子串,但是兩種解決方案本身都是獎勵。如果您可以解釋一些關於解決方案的信息,那麼 將會很有幫助。 –

+0

這只是簡單的'bash'變量操作 - '%'意思是「從右移除子串」,接下來它是要刪除子串的glob模式。我強烈建議至少閱讀一次「bash」手冊頁。 – twalberg

+0

明白了。 %和#運營商是我應該尋找substring requirements.thanks –

相關問題