如何提取 Shell 脚本中匹配模式之后的任何字符串。我知道 Perl 脚本中的这个功能,但我不知道在 Shell 脚本中。
以下是示例,
Subject_01:这是一个示例主题,可能会有所不同
我必须提取“Subject_01:”之后的任何字符串
请提供任何帮助。
这取决于你的外壳。
如果您使用的是bourne shell 或bash或(我相信)pdksh,那么您可以做这样的花哨的事情:
$ string="Subject_01: This is a sample subject and this may vary"
$ output="${string#*: }"
$ echo $output
This is a sample subject and this may vary
$
请注意,这在格式方面非常有限。上面的行要求您在冒号后有一个空格。如果你有更多,它将填充$output
.
如果您使用的是其他 shell,则可能必须使用以下cut
命令执行以下操作:
> setenv string "Subject_01: This is a sample subject and this may vary"
> setenv output "`echo '$string' | cut -d: -f2`"
> echo $output
This is a sample subject and this may vary
> setenv output "`echo '$string' | sed 's/^[^:]*: *//'`"
> echo $output
This is a sample subject and this may vary
>
第一个示例使用cut
,它非常小且简单。第二个示例使用sed
,它可以做得更多,但在 CPU 方面(非常)重一点。
YMMV。在 csh 中可能有更好的方法来处理这个问题(我的第二个示例使用 tcsh),但我的大部分 shell 编程都是在 Bourne 中完成的。