Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
String 使用带符号的bash拆分字符串_String_Bash_Sed_Awk - Fatal编程技术网

String 使用带符号的bash拆分字符串

String 使用带符号的bash拆分字符串,string,bash,sed,awk,String,Bash,Sed,Awk,例如,我有一个字符串:test1@test2 我需要得到这个字符串的test2部分。如何使用bash实现这一点?使用: echo "test1@test2" | sed 's/.*@//' #字符表示删除与模式匹配的扩展的最小前缀 %字符表示删除与模式匹配的扩展的最小后缀。(因此您可以执行“${str%@*}”来获取“test1”部分。) /字符表示删除与以下模式匹配的扩展的最小和第一个子字符串。Bash有,但不是POSIX 如果将模式字符加倍,它将贪婪地匹配 ##表示删除与模式匹配的扩展的最

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

我需要得到这个字符串的
test2
部分。如何使用bash实现这一点?

使用:

echo "test1@test2" | sed 's/.*@//'
  • #
    字符表示删除与模式匹配的扩展的最小前缀
  • %
    字符表示删除与模式匹配的扩展的最小后缀。(因此您可以执行
    “${str%@*}”
    来获取
    “test1”
    部分。)
  • /
    字符表示删除与以下模式匹配的扩展的最小和第一个子字符串。Bash有,但不是POSIX
  • 如果将模式字符加倍,它将贪婪地匹配

  • ##
    表示删除与模式匹配的扩展的最大前缀
  • %%
    表示删除与模式匹配的扩展的最大后缀
  • /
    表示删除与模式匹配的扩展的所有子字符串
  • Bash中的另一种方式:

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

    或者,在bash中,
    xxx=”test1@test2"; sed's/*@/'@JonathanLeffler我知道你在这里的意思,但是你是不是遗漏了一些
    x
    es?嗯……是的,看起来像是“dos equis”逃走了。编辑注释有点晚了……或者,在bash中,
    awk-F“@”{print$2}但这并没有分割字符串,它只打印第二部分。您不能在bash
    中对“${awk-F'@'{print$2}'[@]}”中的子字符串执行此操作。
    可能的重复项应将IFS恢复到空格:IFS=”“。因为bash使用IFS来解析命令行参数。@StepanDyatkovskiy:
    IFS
    只是在执行环境
    read
    中临时被赋予一个新值。当变量赋值以这种方式位于命令之前时,就会发生这种情况。
    echo "test1@test2" | awk -F "@" '{print $2}'
    
    IFS=@ read -r left right <<< "$string"
    echo "$right"
    
    echo "$left"