我试图在正则表达式101中匹配此模式
<a href="http://google.com">Google.com</a>
<A target="_blank" href='http://example.com/files.html'>An Example</A>
<a id="link23" HREF = "file23.html" target="_TOP">File #23</a>
<a href="images/mypic.png">See my picture!</a>
<a href="mailto:joelross@uw.edu">Email Joel</a>
我做了这个regex-&lt; [aA]。 \ s(HREF | href)\ s?= \ s?('|“)。('|”)&gt;。 * LT; / [AA]&GT;
现在,当我尝试通过命令行使用grep命令时,它会抛出一个错误。
./mdlinks.sh: line 3: unexpected EOF while looking for matching `"'
./mdlinks.sh: line 4: syntax error: unexpected end of file
这是源文件
#! /usr/bin/env bash
CONTENT=$(curl $1)
echo "$CONTENT" | grep -E -o '<[aA].*\s(HREF|href)\s?=\s?('|").*('|")>.*<\/[aA]>' >> mdlinks.txt
答案 0 :(得分:1)
你需要逃避正则表达式中的单引号,并且你的shebang还有一个额外的空间(虽然这只是风格):
#!/usr/bin/env bash
CONTENT=$(curl $1)
echo "$CONTENT" | grep -E -o '<[aA].*\s(HREF|href)\s?=\s?('\''|").*('\''|")>.*<\/[aA]>' >> mdlinks.txt
可能值得使用双引号用于正则表达式,而不是单引号。你仍然必须逃避表达式中的双引号,但转义双引号有点清晰:
#!/usr/bin/env bash
CONTENT=$(curl $1)
echo "$CONTENT" | grep -E -o "<[aA].*\s(HREF|href)\s?=\s?('|\").*('|\")>.*<\/[aA]>" >> mdlinks.txt