2012-05-17 18 views
5

たとえば、私は文字列:[email protected]を持っています。bash with symbol with split

test2この文字列の一部を取得する必要があります。どのように私はbashでこれを行うことができますか?

+1

可能重複[bashで文字列操作。 。 。先頭のセクションを削除する](http://stackoverflow.com/questions/2680274/string-manipulation-in-bash-removing-leading-section) – Kaz

答えて

19

Parameter Expansionを使用する:

str='[email protected]' 
echo "${str#*@}" 
  1. #文字ががパターンにマッチする拡張の最小プレフィックスを削除すると言います。
  2. %文字の意味パターンに一致する拡張子の最小接尾辞を削除します。(ですから、"test1"一部を取得するために"${str%@*}"を行うことができます。)
  3. /文字は、次のパターンに一致する拡張の最小と最初の部分文字列を削除し意味します。 Bashはそれを持っていますが、POSIXではありません。

パターンの文字を2倍にすると貪欲に一致します。

  1. ##を意味します。パターンに一致する拡張の最大接頭辞を削除します。
  2. %%意味パターンに一致する拡張子の最大接尾辞を削除します。
  3. //の意味パターンに一致する拡張のすべての部分文字列を削除します。
+0

test2の代わりにtest1を印刷するにはどうすればよいですか? –

+0

@ChrisF私はどのようにそれを行うために私の答えを拡大しました。 – kojiro

3
echo "[email protected]" | sed 's/.*@//' 
+2

または、bashで、 'xxx =" test1 @ test2 "; sed 's /.*@//' <<< $ x'。 –

+0

@JonathanLeffler私はあなたがここで何を意味しているか知っていますが、いくつかの 'x'esを逃していませんか? – kojiro

+0

ええと...はい、それは 'dos equis'がエスケープされたようです。コメントを編集するのはちょっと遅いです... –

5

バッシュで別の方法:の

[email protected] read left right <<< "$string" 
echo "$right"