我使用包含书籍数据的XML文件。 在调查数据损坏问题时,我经常需要提取包含特定string的整个logging。
我正在努力做到这一点,因为我对bash脚本的知识非常有限,完全缺乏其他编程语言(如perl)的知识。
我有标准的用户访问Linux的一个盒子(RHEL 4),没有获得安装任何东西的权限。
使用这个盒子上的标准工具/语言,任何人都可以解释我如何寻找一个特定的string,并从文件中提取任何可能包含它的整个logging?
这个脚本不会按年龄正确sorting
从Perl运行屏幕
如何从OpenVPN提取客户端证书信息?
为什么我的stream程计数脚本会给出误报?
例如从下面的文件中提取包含“Smith”的整个logging。
示例数据:
<File> <Product> <Ref>1</Ref> <Title>My Life</Title> <Series>Life Stories</Series> <Author>John Smith</Author> <Price>5.99</Price> </Product> <Product> <Ref>2</Ref> <Title>A Story</Title> <Author>Fred Bloggs</Author> <Price>16.99</Price> </Product> <Product> <Ref>3</Ref> <Title>Book 1</Title> <Author>Jane Smith</Author> <Price>10.99</Price> </Product> </File>
要求的输出:
<Product> <Ref>1</Ref> <Title>My Life</Title> <Series>Life Stories</Series> <Author>John Smith</Author> <Price>5.99</Price> </Product> <Product> <Ref>3</Ref> <Title>Book 1</Title> <Author>Jane Smith</Author> <Price>10.99</Price> </Product>
也就是说,包含string“Smith”的logging的<Product> </Product>标记之间的所有内容。
这些logging可能包含不同数量的标签,但始终包含在<Product> </Product>标签中。
我很欣赏完美的结果可能是不可能每次都不使用更多的专业工具,但我根本没有把它们提供给我。 任何让我closures的东西都会很棒。
我想脚本会读取文件中的每个logging,依次查找每个logging中的string,并redirect匹配输出的logging。 但是,我正努力在任何地方find答案。
非常感谢您提供的任何帮助。 丹尼
如何增量读取行
Bash:当脚本终止时,如何终止脚本的subprocess?
如何在命令行上获取bashsubprocess的进程ID
bash数组元素的计数操作是可靠的
为什么这个命令replace不会返回期望值?
这应该适用于你的例子:
awk 'BEGIN{RS="<[/]?Product>"} /Smith/{print "<Product>",$0,"</Product>"}' file
这应该适用于你的例子(开始时除了一个额外的<File>):
perl -ne 'BEGIN{$/="</Product>n"} print if /Smith/' file
这可能适合你:
sed -n '/^<Product>/,/^</Product>/{H;//{x;/Smith/p}}' file
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。