在HTML文件的顶部,我有......
<H2>City</H2>
<P>Liverpool</P>
或
<H2>City</H2>
<P>Dublin</P>
我希望在<H2>City</H2>
个实例之后直接在
标记之间输出文本。所以在上面的例子里面是单独的文件,我想打印出利物浦,在第二个例子中,都是都柏林。
看看这个thread,我试试:
sed -e 's/City\(.*\)\/P/\1/'
我希望能在那里找到我...但是这只是打印出整个文件。有什么想法吗?
答案 0 :(得分:2)
awk
救援!你需要多字符RS支持(gawk有它)
$ awk -F'[<>]' -v RS='<H2>City</H2>' 'NF{print $3}' file
另一种方法可以是
$ awk 'c&&c--{sub(/<[^>]*>/,""); print} /<H2>City<\/H2>/{c=1}' file
在City之后找到下一条记录并修剪尖括号......
答案 1 :(得分:1)
尝试使用以下正则表达式:
(?s)(?<=City<\/H2>\n<P>).*?(?=<\/P>)
<强> SED 强>
sed -e 's/(?s)(?<=City<\/H2>\n<P>).*?(?=<\/P>)/'
答案 2 :(得分:1)
我查了一下,\s
似乎不适用于空格。您应该使用换行符\n
:
sed -e 's/<H2>City<\/H2>\n<P>\(.*\)<\/P>/\1/'
不需要使用lookbehind(如上所述),这是一种矫枉过正。
答案 3 :(得分:1)
使用sed,您可以使用n
命令读取模式后的下一行。然后只需删除标记即可输出您的内容:
sed -n '/<H2>City<\/H2>/n;s/ *<\/*P> *//gp;' file
答案 4 :(得分:1)
我认为这应该适用于你的mac:
echo -e "<H2>City</H2>\n<P>Dublin</P>" |awk -F"[<>]" '/City/{getline;print $3}'
Dublin