我最近开始学习 regExp 并在 shell 中找到了一个很好的例子,使用 grep 只提取锚标记 url 例如<a href="unix.stackexchange.com"></a>
grep - 'href="[^"]*"' *.html
如果我得到正确的'href="[^"]*"'
意思是找到href="0-infinity character that does not have " in it "
但不必*
在引号之外?
我很困惑。用于' '
转义字符的特殊含义。所以*
根本不应该工作 +*.html
应该意味着 =0-infinte characters
以 .html 结尾 = 那么一个 grep 中是否可以有两个 ragExp ?
答案1
首先,输出是:
% grep -o 'href="[^"]*"' <<<'<a href="unix.stackexchange.com"></a>'
href="unix.stackexchange.com"
正则表达式模式是
href="[^"]*"
,它被放在单引号内以防止它被 shell 解释*.html
grep
是您要对其执行 Regex/ 操作的文件,这*
是一个 shell 文件名生成模式(匹配任意数量的字符),该模式将导致当前目录中以结尾的所有文件.html
href="
将按字面匹配[^"]*
将匹配子字符串直到 next"
,*
匹配前面标记的零次或多次出现,[^"]
因此如果两个 s 之间没有字符,"
那么它将产生一个空字符串"
匹配文字"