来自输入字符串的匹配URL链接

问题描述:

如何匹配此字符串中的URL地址,我有其他代码与文本匹配并且似乎可行,但是当我尝试在此处使用它时,它不会说有“没有这样的文件或目录。我不知道的grep -o只对文件有效?来自输入字符串的匹配URL链接

matchString='url={"urlPath":"http://www.google.com/","thisIsOtherText"' 
array=($(grep -o 'url={"urlPath":"([^"]+)"' "$matchString")) 
grep: url={"urlPath":"http://www.google.com/","thisIsOtherStuff": No such file or directory 

无论如何,请你帮我URL从匹配‘的MatchString’变量(它不不用为了使用grep)

首选的输出:http://www.google.com/

您需要echo通过管道grep字符串:

array=($(echo "$matchString" | grep -o 'url={"urlPath":"([^"]+)"')) 

的grep从文件或标准输入读取它不接受字符串参数在内搜索

此外,grep将输出整个匹配,而不是括号内的部分。很可能需要使用sed

array=($(echo "$matchString" | sed 's/url={"urlPath":"\([^"]\+\).*"/\1/')) 

sed命令是这样的:

  • s///是替代命令和它的分隔符。如果使表达式更具可读性或有助于消除必须执行的转义,则可以使用其他分隔符以方便使用。前两个分隔符是我们想要改变的。在中间和最后一个之间是我们想要改变它的地方。

  • url={"urlPath":"只是我们使用以帮助使比赛

  • \(\)包围捕获组的文字文本。这里所发生的是我们想要阻止的事情。

  • [^"]这不是一个双引号

  • \+匹配的一个或多个前述图案的任何字符匹配。所以,在这种情况下,这是一个或多个不是引号的字符。

  • .*匹配零个或多个任何字符。在这种情况下,它从google.com/之后的报价处开始并转到字符串的末尾。

  • \1输出第一个(也是唯一的情况下)捕获组捕获的内容。

目视:

 
url={"urlPath":"  http://www.google.com/  ","thisIsOtherText" 
-----literal----  -------non-quote------  ---any character--- 
url={"urlPath":" \( [^"]     \) .* 
+0

干杯,sed的作品。 不知道我的其他代码如何与grep一起工作,但我认为它可能是文件。 – Mint 2010-02-07 04:07:01

+0

你也可以解释一下在那里的正则表达式是如何工作的和\ 1? – Mint 2010-02-07 04:49:31

+0

谢谢!很详细。我会给你两个蜱,如果我可以:) – Mint 2010-02-08 03:16:33

我不熟悉与grep,但有正则表达式的知识。

您可能需要使用添加转义为“

array=($(grep -o 'url\=\{\"urlPath\"\:\"([^\"]*)\"' "$matchString")) 
+0

用户:〜#阵列=($(grep的-o“URL \ = \ {\ “urlPath \” \:\ “([^ \”] *) \''“$ matchString”)); echo“$ array” grep:Unmatched \ { user:〜#array =($(grep -o'url \ = {\“urlPath \”\:\“( [^ \“] *)\”'“$ matchString”));回声“$阵列” grep::没有这样的文件或目录 – Mint 2010-02-07 03:35:31