用符号的bash拆分字符串

0xA*_*xAX 14 string bash awk sed

例如,我有一个字符串:test1@test2.

我需要得到test2这个字符串的一部分.我怎么能用bash做到这一点?

koj*_*iro 31

使用参数扩展:

str='test1@test2'
echo "${str#*@}"
Run Code Online (Sandbox Code Playgroud)
  1. #角色说卸下扩展的模式匹配的最小前缀.
  2. %字符指卸下扩展匹配图案的最小后缀.(所以你可以做"${str%@*}",以获得"test1"一部分).
  3. /字符指卸下扩展符合以下图案的最小和第一子串.Bash有它,但它不是POSIX.

如果你将模式字符翻倍,它会贪婪地匹配.

  1. ##表示删除与模式匹配的扩展的最大前缀.
  2. %%表示删除与模式匹配的扩展的最大后缀.
  3. //意味着删除与模式匹配的扩展的所有子串.


Deb*_*tya 15

echo "test1@test2" | awk -F "@" '{print $2}'
Run Code Online (Sandbox Code Playgroud)

  • 或者,在bash中,'awk -F"@"'{print $ 2}'<<<"test1 @ test2"` (3认同)

Pau*_*ce. 7

Bash的另一种方式:

IFS=@ read -r left right <<< "$string"
echo "$right"
Run Code Online (Sandbox Code Playgroud)

  • @StepanDyatkovskiy:`IFS`只是在`read`的执行环境中临时被赋予一个新值。当以这种方式在命令之前进行变量赋值时,就会发生这种情况。 (3认同)