提取引号之间的所有内容

提取引号之间的所有内容

我正在尝试使用 grep 或 sed 从看起来像这样的字符串中提取 urljavascript:open_window("http://www.example.com/somescript.ext?withquerystring=true");

javascript 链接每次都是由我无法控制的外部应用程序生成的,因此我必须提取 URL 才能使用它。我尝试过使用 grep 和 sed 的一大堆组合,但都失败了,但没有成功。

答案1

简单地使用 GNUgrep:

s='javascript:open_window("http://www.example.com/somescript.ext?withquerystring=true");'
grep -Eo 'http:[^"]+' <<<"$s"
http://www.example.com/somescript.ext?withquerystring=true

答案2

使用sed

sed -E 's/.*\("(.*)"\).*/\1/'

例子:

echo 'javascript:open_window("http://www.example.com/somescript.ext?withquerystring=true")' | sed -E 's/.*\("(.*)"\).*/\1/'
http://www.example.com/somescript.ext?withquerystring=true

答案3

您可以cut指定“””(双引号)作为分隔符来输出。

$ invar='javascript:open_window("http://www.example.com/somescript.ext?withquerystring=true");'
$ echo $invar | cut -d '"' -f2
http://www.example.com/somescript.ext?withquerystring=true

答案4

我通过使用下面的 sed 命令实现了相同的效果

命令

echo 'javascript:open_window("http://www.example.com/somescript.ext?withquerystring=true");'|  sed "s/.*(//g" l.txt  | sed 's/"//g' | sed "s/).*//g"

输出

http://www.example.com/somescript.ext?withquerystring=true

相关内容