我有一个HTML文件,我只需要获取一个特定的部分。这里最大的挑战是这个HTML文件没有换行符,所以我的grep表达式运行良好。
这是我的HTML文件:
<a href="/link1" param1="data1_1" param2="1_2"><p>Test1</p></a><a href="/link2" param1="data1_1" param2="1_2"><p>Test2</p></a>
请注意,我在这一行有两个锚点(<a>
)。
我想获得第二个锚点,我试图使用它来获取它:
cat example.html | grep -o "<a.*Test2</p></a>"
不幸的是,这个命令返回整行,但我只想要:
<a href="/link2" param1="data1_1" param2="1_2"><p>Test2</p></a>
我不知道如何用grep或sed做到这一点,我真的很感激任何帮助。
答案 0 :(得分:1)
使用GNU awk进行多字符RS,如果它是你想要的第二条记录:
$ awk 'BEGIN{RS="</a>"; ORS=RS"\n"} NR==2' file
<a href="/link2" param1="data1_1" param2="1_2"><p>Test2</p></a>
或者如果它是标记为&#34; Test2&#34;:
的记录$ awk 'BEGIN{RS="</a>"; ORS=RS"\n"} /<p>Test2<\/p>/' file
<a href="/link2" param1="data1_1" param2="1_2"><p>Test2</p></a>
或:
$ awk 'BEGIN{RS="</a>"; ORS=RS"\n"; FS="</?p>"} $2=="Test2"' file
<a href="/link2" param1="data1_1" param2="1_2"><p>Test2</p></a>
答案 1 :(得分:0)
使用Perl:
$ perl -pe '@a = split(m~(?<=</a>)~, $_);$_ = $a[1]' file
<a href="/link2" param1="data1_1" param2="1_2"><p>Test2</p></a>
故障:
perl -pe ' ' # Read line for line into $_
# and print $_ at the end
m~(?<=</a>)~ # Match the position after
# each </a> tag
@a = split( , $_); # Split into array @a
$_ = $a[1] # Take second item
答案 2 :(得分:0)
这应该做:
grep -o '<a[^>]*><p>Test2</p></a>' example.html