来自输入字符串的匹配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":" \( [^"] \) .*
我不熟悉与grep,但有正则表达式的知识。
您可能需要使用添加转义为“
array=($(grep -o 'url\=\{\"urlPath\"\:\"([^\"]*)\"' "$matchString"))
用户:〜#阵列=($(grep的-o“URL \ = \ {\ “urlPath \” \:\ “([^ \”] *) \''“$ matchString”)); echo“$ array” grep:Unmatched \ { user:〜#array =($(grep -o'url \ = {\“urlPath \”\:\“( [^ \“] *)\”'“$ matchString”));回声“$阵列” grep::没有这样的文件或目录 – Mint 2010-02-07 03:35:31
干杯,sed的作品。 不知道我的其他代码如何与grep一起工作,但我认为它可能是文件。 – Mint 2010-02-07 04:07:01
你也可以解释一下在那里的正则表达式是如何工作的和\ 1? – Mint 2010-02-07 04:49:31
谢谢!很详细。我会给你两个蜱,如果我可以:) – Mint 2010-02-08 03:16:33