Bash 使用grep、sed或awk在匹配后获取上一个href
我有一个未格式化的html文件,需要在匹配之前获取href链接。。。我的html文件看起来像:Bash 使用grep、sed或awk在匹配后获取上一个href,bash,awk,sed,Bash,Awk,Sed,我有一个未格式化的html文件,需要在匹配之前获取href链接。。。我的html文件看起来像: <a href="url1.com">Bla Bla Bla [Test1]</a><a href="url2.com">Bla Bla Bla [Test2]</a><a href="url3.com">Bla Bla Bla [Test3]</a> 我真的很感谢你的帮助 谢谢这应该可以: sed -n 's/.*href="
<a href="url1.com">Bla Bla Bla [Test1]</a><a href="url2.com">Bla Bla Bla [Test2]</a><a href="url3.com">Bla Bla Bla [Test3]</a>
我真的很感谢你的帮助
谢谢这应该可以:
sed -n 's/.*href="\([^"]*\)">.*\[Test2\].*/\1/p' file
url2.com
使用GNU grep:
grep -oP '(?<=href=")[^"]*(?=">[^<>]*\[Test2\])' file
url2.com
grep-oP'(?这应该可以:
sed -n 's/.*href="\([^"]*\)">.*\[Test2\].*/\1/p' file
url2.com
使用GNU grep:
grep -oP '(?<=href=")[^"]*(?=">[^<>]*\[Test2\])' file
url2.com
grep-oP'(?$awk-F'[\\]”]“{for(i=1;i$awk-F'[\\]”]”{for(i=1;i使用带PCRE的grep
):
href=“
在所需URI之前匹配,\K
放弃匹配
[^”]+
获取所需的部分
- 零宽度正向前瞻模式,
(?=“[^[]+\[Test2\])
,确保匹配后面紧跟方括号中的任何内容,但[Test2]
使用sed的类似逻辑:
sed -E 's/.*[[:blank:]]href="([^"]+)"[^[]+\[Test2\].*/\1/' file.html
示例:
$ grep -Po 'href="\K[^"]+(?="[^[]+\[Test2\])' <<<'<a href="url1.com">Bla Bla Bla [Test1]</a><a href="url2.com">Bla Bla Bla [Test2]</a><a href="url3.com">Bla Bla Bla [Test3]</a>'
url2.com
$ sed -E 's/.*[[:blank:]]href="([^"]+)"[^[]+\[Test2\].*/\1/' <<<'<a href="url1.com">Bla Bla Bla [Test1]</a><a href="url2.com">Bla Bla Bla [Test2]</a><a href="url3.com">Bla Bla Bla [Test3]</a>'
url2.com
$grep-Po'href=“\K[^”]+(?=”[^[]+\[Test2\])”使用带PCRE的grep
(-p
):
href=“
在所需URI之前匹配,\K
放弃匹配
[^”]+
获取所需的部分
- 零宽度正向前瞻模式,
(?=“[^[]+\[Test2\])
,确保匹配后面紧跟方括号中的任何内容,但[Test2]
使用sed的类似逻辑:
sed -E 's/.*[[:blank:]]href="([^"]+)"[^[]+\[Test2\].*/\1/' file.html
示例:
$ grep -Po 'href="\K[^"]+(?="[^[]+\[Test2\])' <<<'<a href="url1.com">Bla Bla Bla [Test1]</a><a href="url2.com">Bla Bla Bla [Test2]</a><a href="url3.com">Bla Bla Bla [Test3]</a>'
url2.com
$ sed -E 's/.*[[:blank:]]href="([^"]+)"[^[]+\[Test2\].*/\1/' <<<'<a href="url1.com">Bla Bla Bla [Test1]</a><a href="url2.com">Bla Bla Bla [Test2]</a><a href="url3.com">Bla Bla Bla [Test3]</a>'
url2.com
$grep-Po'href=“\K[^”]+(?=”[^[]+\[Test2\])“一般来说,使用需要行分隔数据的工具来处理非行分隔的数据(如XML)不是一个好主意。请改用xmlstarlet
之类的工具。@MichaelVehrs:html似乎被缩小了……一般来说,使用需要行分隔的工具来处理非行分隔的数据(如XML)不是一个好主意。”行分隔的数据。请使用类似于xmlstarlet
的内容。@MichaelVehrs:html似乎缩小了。。。