linux – sed:只有当其中一行匹配第三个单词或任何模式时,才会在两个单词之间打印行
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了linux – sed:只有当其中一行匹配第三个单词或任何模式时,才会在两个单词之间打印行,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1519字,纯文字阅读大概需要3分钟。
内容图文
我知道sed使用以下命令从test.txt打印单词FOO和BAR之间的行
sed -n '/FOO/,/BAR/p' test.txt
但是,只有当其中一条线具有匹配的图案时,我如何使sed打印FOO和BAR之间的线条
例如,文件text.txt包含以下行:
Error- Undefined port
line1
line2
Undefined port in ALU1
line3
Error- Undefined port
line4
line5
Undefined port in LSU
line6
Error- Undefined port
line7
line8
Undefined port in FGU
line9
Error- Undefined port
line10
line11
Undefined port in ALU2
line12
我想在两次连续出现之间打印出行
仅当其中一行包含单词“ALU”时,单词“Error”.
所以我只想打印出以下错误消息:
Error- Undefined port
line1
line2
Undefined port in ALU1
line3
Error- Undefined port
line10
line11
Undefined port in ALU2
line12
解决方法:
要实现这一点,您需要在sed脚本中分支并保留缓冲区.
该脚本使用两个缓冲区:模式缓冲区(它是sed存储当前处理的行的缓冲区,用于模式匹配测试的缓冲区)和保持缓冲区(用于存储前一行的缓冲区).我们的想法是存储上一个/错误/模式匹配的所有行,并在下一个/错误/匹配或流结束时检查/ ALU /出现.
sed -n '
# if /Error/ pattern occured, jump to /ALU/ check
/Error/ b alu_check
# else append current line to the hold buffer
H
# if the current line is the last one, jump to /ALU/ check
$b alu_check
# otherwise jump to end of script (= finish processing of this line)
b
# alu_check:
:alu_check
# exchange current pattern buffer with hols buffer context
x
# print previous record if /ALU/ occured
/ALU/ p
'
x命令用保持缓冲区上下文(从上次记住的内容)交换模式缓冲区上下文(当前行) – 注意它将当前行/ Error / pattern存储到保持缓冲区以供下次使用
H将当前行上下文附加到保持缓冲区
内容总结
以上是互联网集市为您收集整理的linux – sed:只有当其中一行匹配第三个单词或任何模式时,才会在两个单词之间打印行全部内容,希望文章能够帮你解决linux – sed:只有当其中一行匹配第三个单词或任何模式时,才会在两个单词之间打印行所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。