sed -n '/FOO/,/bar/p' test.txt
但是,只有当其中一条线具有匹配的图案时,我如何使sed打印FOO和bar之间的线条
例如,文件text.txt包含以下行:
Error- Undefined portline1line2Undefined port in ALU1 line3Error- Undefined portline4line5Undefined port in LSU line6Error- Undefined portline7line8Undefined port in FGU line9 Error- Undefined portline10line11Undefined port in ALU2 line12
我想在两次连续出现之间打印出行
仅当其中一行包含单词“ALU”时,单词“Error”.
所以我只想打印出以下错误消息:
Error- Undefined portline1line2Undefined port in ALU1 line3Error- Undefined portline10line11Undefined 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 bufferH# 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 contextx# print prevIoUs record if /ALU/ occured/ALU/ p'
x命令用保持缓冲区上下文(从上次记住的内容)交换模式缓冲区上下文(当前行) – 注意它将当前行/ Error / pattern存储到保持缓冲区以供下次使用
H将当前行上下文附加到保持缓冲区
总结以上是内存溢出为你收集整理的linux – sed:只有当其中一行匹配第三个单词或任何模式时,才会在两个单词之间打印行全部内容,希望文章能够帮你解决linux – sed:只有当其中一行匹配第三个单词或任何模式时,才会在两个单词之间打印行所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)