Dwi*_*ija 1 linux string bash shell
我需要从字符串中提取路径。我在另一篇文章中找到了示例,但缺少其他步骤。
我有一个字符串如下:
title="test test good dskgkdh hdfyr /rlsmodules/svnrepo/SOURCE/CBL/MQ/BASELINE/MQO000.CBL kdlkfg nsfgf trhrnrt"
cobsrc=$(awk '{match($0,/\/[^"]*/,a);print a[0]}' <<< $title)
echo $cobsrc
Run Code Online (Sandbox Code Playgroud)
输出是
/rlsmodules/svnrepo/SOURCE/CBL/MQ/BASELINE/MQO000.CBL kdlkfg nsfgf trhrnrt
Run Code Online (Sandbox Code Playgroud)
我只需要
/rlsmodules/svnrepo/SOURCE/CBL/MQ/BASELINE/MQO000.CBL
Run Code Online (Sandbox Code Playgroud)
需要什么修改?
关于类似查询的现有帖子: how to extract path from string in shell script
四种解决方案,按照我自己的喜好排序。
第一个选项是简单的参数扩展,分两步:
$ title="/${title#*/}"
$ title="${title%% *}"
$ echo "$title"
/rlsmodules/svnrepo/SOURCE/CBL/MQ/BASELINE/MQO000.CBL
Run Code Online (Sandbox Code Playgroud)
第一行删除了第一个斜杠之前的所有内容(同时添加了一个斜杠来替换被剥离的那个”,第二行从剩下的第一位空格中删除了所有内容。
或者,如果您愿意,也可以使用正则表达式:
$ [[ $title =~ ^[^/]*(/[^ ]+)\ ]]
$ echo ${BASH_REMATCH[1]}
/rlsmodules/svnrepo/SOURCE/CBL/MQ/BASELINE/MQO000.CBL
Run Code Online (Sandbox Code Playgroud)
正则表达式翻译为:
该$BASH_REMATCH数组包含括号内原子的内容。
下一个选项可能是grep -o:
$ grep -o '/[^ ]*' <<<"$title"
Run Code Online (Sandbox Code Playgroud)
(结果已编辑 - 你知道它会是什么。)
您当然可以使用您已经知道的命令替换将此输出分配给变量。
最后一个选择是另一个外部工具......
$ sed 's:^[^/]*::;s/ .*//' <<<"$title"
Run Code Online (Sandbox Code Playgroud)
这与仅在 sed 脚本中由参数扩展(在答案顶部)处理的功能相同,它需要调用外部程序。仅包含用于迂腐。:)