用sed在多行变量中的单引号之间提取文本

时间:2017-06-15 21:38:39

标签: bash variables sed

我正在尝试编写脚本。我使用xmlrpc远程过程调用来获取url。我将输出作为变量分配在一个命令中,例如url=$(xmlrpc 192.168.1.1 command...)。这是输出到文件时过程调用的输出:

Result:

String: 'http://example.url'

这一切都显示在echo $url的一行上。当我尝试使用sed s/^.*'\(.*\)'.*$/\1/ $url在单引号之间提取URL时,我得到以下内容:

sed: can't read Result:: no such file or directory
sed: can't read String:: no such file or directory
sed: can't read http://example.url: no such file or directory

也许多行是问题所在。我对grep -oP "(?<=').*?(?=')" $url有任何想法都有类似的错误吗?我只是想提取网址。

3 个答案:

答案 0 :(得分:2)

使用 bash 常规表达

[[ "$url" =~ \'(http:[^\']*)\' ]] && echo ${BASH_REMATCH[1]}
http://example.url

答案 1 :(得分:0)

我认为你应该提供原生bash正则表达式并尝试更换。如果您真的想从多行变量中提取URL:

$ echo "$url"
Results:

String: 'http://example.url'

使用sed,然后你可以使用这样的东西:

$ url=$(sed -n "s/^.*'\(.*\)'.*$/\1/p" <<< $var)
$ echo "$url"
http://example.url

答案 2 :(得分:0)

sed -n "s/^.*'\(.*\)'.*$/\1/ p" <<< ${url}