rub*_*o77 6 sed regular-expression
如何仅获取链接的 http 源中的链接部分?
我有
<a href="http://unix.stackexchange.com/users/20661/">Unix & Linux
Run Code Online (Sandbox Code Playgroud)
并且想要得到
http://unix.stackexchange.com/users/20661/
Run Code Online (Sandbox Code Playgroud)
我试过
sed 's/^.*(http.*)".*$/\1/g'
Run Code Online (Sandbox Code Playgroud)
但这给出了一个错误:
sed: -e expression #1, char 22: invalid reference \1 on `s' command's RHS
Run Code Online (Sandbox Code Playgroud)
尝试这个:
sed -r 's/.*(http[^"]*)".*/\1/g'
Run Code Online (Sandbox Code Playgroud)
在 Mac OSX 上,尝试:
sed -E 's/.*(http[^"]*)".*/\1/g'
Run Code Online (Sandbox Code Playgroud)
这个sed
命令有几个需要注意的地方:
sed 's/^.*(http.*)".*$/\1/g'
Run Code Online (Sandbox Code Playgroud)
该^
是不必要的。sed 的正则表达式总是贪婪的。这意味着,如果一个以.*
匹配开头的正则表达式,它将始终从行的开头匹配。
为了(
成为一个分组字符,它可以被转义,也可以使用-r
标志(-E
在 OSX 上)打开扩展正则表达式。此标志通常会大大减少您需要的转义次数。
此外,因为正则表达式是贪婪的,(http.*)"
将匹配行中的最后一个双引号,而不是第一个。但是,URL 将以第一个双引号结尾。相反,使用(http[^"]*)"
和匹配永远不会超出第一个"
。
美元符号.*$
也是多余的。同样,因为正则表达式是贪婪的,如果以.*
匹配结尾的正则表达式,它将匹配到行尾。