2017-06-19 18 views
1

私は文字列が/abc/xyz/def/xyz/1234/lmn/xyz/7890/uvwで、Linuxにあります。シェルスクリプト内の単語が最後に出現する前に部分文字列を取得

シェルスクリプトを使用して、文字列xyzが最後に出現する前に部分文字列を抽出します。

例:

入力:

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

出力:

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

私はオンラインで検索し、単一文字の区切りを持つソリューションがありますが、私が取得する方法を見つけ出すことができませんでしたそれはxyzのようなストリングセパレータで動作します。これについてどのように

+0

あなたの説明によると、部分文字列は最後のスラッシュを含む 'lmn /'で終わるはずですが、例にはその文字列が含まれていません。どちらですか? –

+0

@benjaminWお時間をいただきありがとうございます。私はスラッシュのない部分文字列を探しています。 –

答えて

2

:あなたは本当に最後xyz/をしたくない場合は

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

、その後、第2のエコーは、あなたが探しているものである必要があります。末尾に/を残しておけば問題ありません。

+0

ご協力いただきありがとうございます。これはうまくいった。私はスラッシュのない部分文字列が必要でしたが、両方の解決策を持つこと自体が特典です。ソリューションについて少し説明できる場合は が役に立ちます。 –

+0

これは単純な 'bash'変数の操作です - '% 'は" right from substring from right "を意味し、それに続くのは削除したい部分文字列のグロブパターンです。私は 'bash'マニュアルページを少なくとも一度は読むことを強くお勧めします。 – twalberg

+0

それを得ました。 %演算子と#演算子は、substring requirements.thanksを探しているはずです。 –

関連する問題