25

たとえば、次の文字列がありますtest1@test2

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

4

4 に答える 4

40

パラメータ展開の使用:

str='test1@test2'
echo "${str#*@}"
  1. #文字は、パターンに一致する展開の最小のプレフィックスを削除します.
  2. %文字は、パターンに一致する展開の最小のサフィックスを削除することを意味します。(だからあなたは"${str%@*}"その部分を手に入れることができます"test1"。)
  3. 文字は、次のパターンに一致する展開の最小かつ最初の部分文字列を削除すること/を意味します。Bash にはありますが、POSIX ではありません。

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

  1. ##パターンに一致する展開の最大のプレフィックスを削除することを意味します。
  2. %%パターンに一致する展開の最大の接尾辞を削除することを意味します。
  3. //パターンに一致する展開のすべての部分文字列を削除することを意味します。
于 2012-05-17T15:18:51.200 に答える
25
echo "test1@test2" | awk -F "@" '{print $2}'
于 2012-05-17T19:02:45.833 に答える
7

Bash での別の方法:

IFS=@ read -r left right <<< "$string"
echo "$right"

この手法は、文字列の最初の部分も提供することに注意してください。

echo "$left"
于 2012-05-18T01:01:09.610 に答える
4
echo "test1@test2" | sed 's/.*@//'
于 2012-05-17T15:18:49.850 に答える