问题描述
catgrab.txt
cat grab.txt
My Dashboard
Fnfjfjf. random test
00:50
1:01:56
My Notes
No data found.
Change Language + English
Submit
Estimation of Working Capital Lecture 1
Estimation of Working Capital Lecture 2
Estimation of Working Capital Lecture 3
Money Market Lecture 254
Money Market Lecture 255
Money Market Lecture 256
International Trade Lecture 257
International Trade Lecture 258
International Trade Lecture 259
Terms And Conditions
84749473837373
Random text fifjfofifofjfkfkf
执行以下操作后,我需要过滤此文本
I need to filter this text after doing the following
- 删除第一次出现单词之前的所有行-演讲
- 删除单词最后一次出现后的所有行-演讲
- 删除所有空行
预期产量
Estimation of Working Capital Lecture 1
Estimation of Working Capital Lecture 2
Estimation of Working Capital Lecture 3
Money Market Lecture 254
Money Market Lecture 255
Money Market Lecture 256
International Trade Lecture 257
International Trade Lecture 258
International Trade Lecture 259
到目前为止我尝试了什么?
What have I tried so far?
cat grab.txt | sed -r '/^\s*$/d; /Lecture/,$!d'
在搜索了一些错误之后,我能够删除空行并删除第一次出现之前的所有行,但是无法删除最后一次出现之后的所有行.
After searching for a bit and some trial-error, I am able to remove empty lines and remove all lines before the first occurrence but unable to remove all lines after the last occurrence.
注意-即使我现有的命令使用sed,如果答案是awk,perl或grep,也可以使用它
Note - Even tho my existing command is using sed, its fine if the answer is in awk, perl or grep
推荐答案
能否请您尝试以下操作.用GNU awk
用显示的示例编写和测试.
Could you please try following. Written and tested with shown samples with GNU awk
.
awk '
/Lecture/{
found=1
}
found && NF{
val=(val?val ORS:"")$0
}
END{
if(val){
match(val,/.*Lecture [0-9]+/)
print substr(val,RSTART,RLENGTH)
}
}' Input_file
说明: 添加以上详细说明.
Explanation: Adding detailed explanation for above.
awk ' ##Starting awk program from here.
/Lecture/{ ##Checking if a line has Lecture keyword then do following.
found=1 ##Setting found to 1 here.
}
found && NF{ ##Checking if found is SET and line is NOT NULL then do following.
val=(val?val ORS:"")$0 ##Creating va and keep adding its value in it.
}
END{ ##Starting END block of this code here.
if(val){ ##Checking condition if val is set then do following.
match(val,/.*Lecture [0-9]+/) ##Matching regex till Lecture digits in its value.
print substr(val,RSTART,RLENGTH) ##Printing sub string of matched values here to print only matched values.
}
}' Input_file ##Mentioning Input_file name here.
这篇关于如何删除字符串的第一次出现和最后一次出现之后的所有行?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!