从字符串中第二次出现的破折号中提取字符



我有一个字符串">苹果-玫瑰-橙子-21-X-84";我需要使用 shell 脚本在第二次出现">-"后提取字符串。

答案应该是橙色-21-X-84

我将如何在 shell 脚本中执行此操作,我已经尝试了几种方法,找不到答案。

仅外壳解决方案:

string='apple-rose-orange-21-X-84'
echo ${string#*-*-}

请参见外壳参数扩展

${参数#单词}

${参数##word}

该单词被扩展以产生 模式并根据下面描述的规则进行匹配(请参阅 模式匹配(。如果模式与 参数的展开值,则展开的结果是 具有最短匹配模式的参数的扩展值( 删除了"#"大小写(或最长匹配模式("##"大小写(。如果 参数为 '@' 或 '',模式删除操作应用于 每个位置参数依次,扩展是结果 列表。如果参数是下标为"@"或"的数组变量, 模式删除操作应用于数组的每个成员 反过来,扩展是结果列表。

您可以使用cut命令:

$ cut -d- -f3- <<<'apple-rose-orange-21-X-84'
orange-21-X-84

-d-将破折号设置为剪切的分隔符。-f3-从第三个到最后一个字段中进行选择。<<<生成一个 here-string 。有关更详细的说明,请参阅man cutman bash

这里有一些POSIXshell方法(不需要bash或外部实用程序(:

  1. 使用管道和read

    echo apple-rose-orange-21-X-84 | (IFS="-" read a b c; echo $c;)
    
  2. 使用参数替换:

    s=apple-rose-orange-21-X-84; echo ${s#*-*-}
    

最新更新