jay*_*yem 8 regex bash conditional
我有一个我需要验证的正则表达式.正则表达式中有双引号,但我似乎无法弄清楚如何正确地逃避它们.
第一次尝试,不起作用,因为引号不会被转义.
while read line
do
if [[ $line =~ "<a href="(.+)">HTTP</a>" ]]; then
SOURCE=${BASH_REMATCH[1]}
break
fi
done < tmp/source.html
echo "{$SOURCE}" #output = {"link.html"} (with double quotes)
Run Code Online (Sandbox Code Playgroud)
我怎样才能正确运行这个输出是没有双引号的link.html.
我试过了...
while read line
do
if [[ $line =~ "<a href=/"(.+)/">HTTP</a>" ]]; then
SOURCE=${BASH_REMATCH[1]}
break
fi
done < tmp/source.html
echo "{$SOURCE}" #output = {}
Run Code Online (Sandbox Code Playgroud)
没有运气.有人可以帮助我,这样我就可以不再在我的桌子上敲打头了吗?我对Bash不太满意.谢谢!
Pau*_*ce. 10
将正则表达式放在变量中总是最好的.
pattern='<a href="(.+)">HTTP</a>'
while read line
do
if [[ $line =~ $pattern ]]; then
SOURCE=${BASH_REMATCH[1]}
break
fi
done < tmp/source.html
echo "{$SOURCE}" #output = {link.html} (without double quotes)
Run Code Online (Sandbox Code Playgroud)
如果引用右侧(模式),它会将匹配从正则表达式更改为简单的字符串(=~实际上变为==).
作为旁注,转义是使用反斜杠(\)而不是斜杠(/),但由于前一段中提到的外部引号,这对你的情况没有帮助.