我有一个字符串">苹果-玫瑰-橙子-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 cut
和man bash
。
这里有一些POSIXshell方法(不需要bash
或外部实用程序(:
使用管道和
read
:echo apple-rose-orange-21-X-84 | (IFS="-" read a b c; echo $c;)
使用参数替换:
s=apple-rose-orange-21-X-84; echo ${s#*-*-}