我是AWK的新手,但我需要从一个似乎不是很简单的规则开始,至少对我而言。也许有人可以帮我找到解决方案。
我需要搜索并删除一些包含特定模式的行。至于bekow示例:我需要删除包含名称" pippo2"
的整个部分(三行)输入文件:
<Name>
Pippo1
</Name>
<Name>
Pippo2
</Name>
<Name>
Pippo3
</Name>
所需的输出文件:
<Name>
Pippo1
</Name>
<Name>
Pippo3
</Name>
一切顺利 莫罗
您好!
谢谢大家的建议。
但我很抱歉确认您的意见,实际上使用的结构有点复杂,建议的过滤器停止工作: - (
这是更复杂的结构:
<Name>
<data>Pippo1</data>
</Name>
<Name>
<data>Pippo2</data>
</Name>
<LastName>
<data>Pippo3</data>
</LastName>
答案 0 :(得分:1)
gawk
救援!
你需要一个正则表达式RS
来表示以下内容(gawk支持)
awk -v RS="</[^>]+>" '!/Pippo2/{printf "%s", $0 RT}' pippos
<Name>
Pippo1
</Name>
<Name>
Pippo3
</Name>
答案 1 :(得分:0)
如果文件t.dat
包含您的数据,则以下awk
脚本将执行此任务:
$ awk '/<Name>/{notFound=1} {str=str $0} /Pippo2/{notFound=0} /<\/Name>/{if(notFound){print str;} str=""; notFound=1;}' t.dat
<Name>Pippo1</Name>
<Name>Pippo3</Name>
当然这个解决方案不是很通用 - 它只适用于像你这样的架构的数据文件 - 每个记录(可能是多行)都附有<Name> ... </Name>
标签。