Unix 如何删除具有特定图案的线条和下一行
我是Unix新手,目前有一个包含各种数据的大文件。在这个文件中,有些行现在是多余的,需要删除 在文件中,模式为:Unix 如何删除具有特定图案的线条和下一行,unix,sed,grep,Unix,Sed,Grep,我是Unix新手,目前有一个包含各种数据的大文件。在这个文件中,有些行现在是多余的,需要删除 在文件中,模式为: <contact contact_id="<number>" txn="D"> </contact> 请帮我找到一个新的解决方案。使用awk 差不多 /<contact contact_id=.* txn="D">/ { got_contact = 1; next } got_contact == 1 { got_contact =
<contact contact_id="<number>" txn="D">
</contact>
请帮我找到一个新的解决方案。使用awk
差不多
/<contact contact_id=.* txn="D">/ { got_contact = 1; next }
got_contact == 1 { got_contact = 0; next }
{ print }
/{got_contact=1;next}
got_contact==1{got_contact=0;next}
{print}
即使是古代的awk也应该能够处理这个问题。(可能会有更紧凑的解决方案,但这不是code golf)使用awk
差不多
/<contact contact_id=.* txn="D">/ { got_contact = 1; next }
got_contact == 1 { got_contact = 0; next }
{ print }
/{got_contact=1;next}
got_contact==1{got_contact=0;next}
{print}
即使是古代的awk也应该能够处理这个问题。(可能有一个更紧凑的解决方案,但这不是code golf)您可以使用
GNU-sed
?对于那些想要编写可移植sed脚本的人,请注意,已知一些实现将行长度(对于模式和保持空间)限制为不超过4000字节。POSIX标准规定,符合标准的sed实现应支持至少8192字节的行长度。GNU sed对线路长度没有内置限制;只要它能提供更多(虚拟)内存,您就可以随意填充或构造行 下一个解决方案将开始将文件转换为一个长行:
tr '\n' '\r' < your_file |
sed 's#<contact contact_id=[^ ]* txn="D">\r</contact>\r##g;
s#\r#\n#g'
tr'\n'\r'<您的\u文件|
塞德的#\r\r##g;
s\r\n\g'
您能使用GNU-sed吗?对于那些想要编写可移植sed脚本的人,请注意,已知一些实现将行长度(对于模式和保持空间)限制为不超过4000字节。POSIX标准规定,符合标准的sed实现应支持至少8192字节的行长度。GNU sed对线路长度没有内置限制;只要它能提供更多(虚拟)内存,您就可以随意填充或构造行 下一个解决方案将开始将文件转换为一个长行:
tr '\n' '\r' < your_file |
sed 's#<contact contact_id=[^ ]* txn="D">\r</contact>\r##g;
s#\r#\n#g'
tr'\n'\r'<您的\u文件|
塞德的#\r\r##g;
s\r\n\g'
你能在你的操作系统上安装程序/软件包吗?不幸的是,我只能使用SunOS 5.10的基本版本,不知道你使用sed-e'
是什么意思(例如,我假设你指的是sed-e'3,+1d'文件)。如果您使用的是一个变量,那么您需要sed-e“$lineNum,+1d”文件
,但我希望一个范围匹配可以工作,因此sed'/[]/,+1d”文件
应该可以工作。请注意,-e
并不是每个人都需要的。与其说“不受支持”,不如说包含正在运行的确切代码示例的副本/粘贴,并显示错误消息sed
相当精细,而且3、+1d
用于我工作过的Sun 3机器;-)感谢您的反馈,我现在已经更新了它,当运行命令sed-e'12442,+1d'file.out>output.out
时,它给出的消息是sed:command-garbled:12442,+1d
,您能在操作系统上安装程序/软件包吗?不幸的是,我被锁定在SunOS 5.10的基本版本中,不确定您对sed-e'
的意思(例如,我假设您指的是sed-e'3,+1d'文件)。如果您使用的是一个变量,那么您需要sed-e“$lineNum,+1d”文件
,但我希望一个范围匹配可以工作,因此sed'/[]/,+1d”文件
应该可以工作。请注意,-e
并不是每个人都需要的。与其说“不受支持”,不如说包含正在运行的确切代码示例的副本/粘贴,并显示错误消息sed
相当精细,而且3、+1d
用于我工作过的Sun 3机器;-)感谢您提供的反馈,我现在已经更新了它,它给出的消息是sed:command-garbled:12442,+1d
当运行命令sed-e'12442,+1d'file.out>output.out
测试该代码后,该解决方案似乎不起作用。出现了什么问题?标签是混合的吗?哦,我错过了添加类似的行。您必须扩展模式以保持这些相似的线条。像/
你试过awk'。。。单引号内罗纳德的代码…'orgfile>newfile
和diff-orgfile-newfile
?谢谢!我的愚蠢应该已经注意到,它不会与*
一起工作,需要txn=“D”
才能工作。这已经像一个魅力,再次感谢!在测试代码之后,这个解决方案似乎不起作用。出了什么问题?标签是混合的吗?哦,我错过了添加类似的行。您必须扩展模式以保持这些相似的线条。像/
你试过awk'。。。单引号内罗纳德的代码…'orgfile>newfile
和diff-orgfile-newfile
?谢谢!我的愚蠢应该已经注意到,它不会与*
一起工作,需要txn=“D”
才能工作。这已经像一个魅力,再次感谢!