Parsing 使用sed删除两条线路

Parsing 使用sed删除两条线路,parsing,awk,sed,newline,Parsing,Awk,Sed,Newline,我正在写一个可以解析HTML文档的脚本。我想删除两行,sed如何处理新行?我试过了 sed 's/<!DOCTYPE.*\n<h1.*/<newstring>/g' sed的/如果xml解析工具肯定不是一个选项,那么awk可能是一个选项: awk '/<!DOCTYPE/ { lne=NR+1;next } NR==lne && /<h1/ { next }1' file awk'/我的文档解决方案如下: <b>... <

我正在写一个可以解析HTML文档的脚本。我想删除两行,sed如何处理新行?我试过了

sed 's/<!DOCTYPE.*\n<h1.*/<newstring>/g'

sed的/如果xml解析工具肯定不是一个选项,那么awk可能是一个选项:

awk '/<!DOCTYPE/ { lne=NR+1;next } NR==lne && /<h1/ { next }1' file

awk'/我的文档解决方案如下:

<b>...
<first...
<second...
<third...
<a ...
/<!DOCTYPE.*/{
    :pump
    N
    /some-regex-to-stop-pump/!b pump
    /regex-which-indicates-we-should-delete/d
}
。。。

对于删除两行(如果每行与某个模式匹配)的简单任务,只需执行以下操作:

sed '/<!DOCTYPE.*/{N;/\n<h1.*/d}'
但是,在
sed
awk
中编写完整的XML解析器是一项艰巨的任务,使用现有的解决方案可能会更好。

这可能适合您(GNU-sed):


sed'N/第二种方法删除尽可能多的文本,包括换行符,因为
*
是“贪婪的”(POSIX正则表达式不支持惰性/非贪婪的量词)和
匹配POSIX正则表达式中的任何字符,包括换行符。请使用sed-z进行尝试
我正在编写一个可以解析HTML文档的脚本-->不建议使用
sed
进行此操作。使用诸如
xmlstarlet
之类的工具或具有库的编程语言来解析xml/html。如果您必须使用
sed/awk/perl
,并且必须在整行中匹配这些模式,请参阅Sundeep,对不起,我不能使用xmlstarlet执行此任务。我需要删除以特定字符串开头的2-3行。它在EMACS中运行良好,但我想在脚本中执行。
我想删除两行
哪两行<代码>我需要删除以特定字符串开头的2-3行
所以是2行还是3行?从哪一个字符串开始?它也适用于3行吗?您可以编写这样的特定命令来删除任意多的行。您只需重复使用
N
。我会调整我的答案,因为我意识到你想在接下来的几行中匹配。。。
sed '/<!DOCTYPE.*/{N;/\n<h1.*/d}'
/<!DOCTYPE.*/{
    :pump
    N
    /some-regex-to-stop-pump/!b pump
    /regex-which-indicates-we-should-delete/d
}
sed 'N;/<!DOCTYPE.*\n<h1.*/d;P;D' file
sed 'N;s/<!DOCTYPE.*\n<h1.*/another string/;P;D'