如何使用sed或其他工具提取以问号结尾的行及其前一行?
提取以问号结尾的行及其前一行的解决方案
嘿,这需求用sed或者awk都能轻松实现,我给你俩实用方案,你可以根据自己的习惯选:
方案一:用sed命令
这个命令利用sed的保持空间暂存前一行内容,匹配到目标行时一起输出:
sed -n '/\?$/{x;p;x;p};h' your_file.txt
给你拆解下每个部分的作用:
-n:让sed不默认输出所有行,只输出我们指定的内容h:把当前行的内容存入「保持空间」(相当于临时存前一行)/\?$/:匹配以问号结尾的行(\?是转义问号,因为问号在正则里是特殊字符){x;p;x;p}:当匹配到目标行时,先交换保持空间和模式空间(拿到前一行),打印前一行;再交换回来,打印当前行
方案二:用awk命令
awk的写法更直观,用变量暂存前一行,逻辑清晰:
awk 'prev {print prev} /\?$/ {print; prev=""; next} {prev=$0}' your_file.txt
解释下逻辑:
prev=$0:如果当前行不是问号结尾的行,就把它存到prev变量里(存前一行)- 当遇到以问号结尾的行(
/\?$/):先打印prev里存的前一行,再打印当前行,然后把prev清空(避免重复输出) - 如果
prev有内容但当前行不是目标行,不会触发打印,只会更新prev
示例测试
比如你的示例文本:
& 434.0K - .... What are you trying to filter out of screencap's output?
Student xcvdgfdg srrtgg
假设还有更多行的话,比如:
Line 1: Let's test this
Line 2: Do you like these tools?
Line 3: Another line here
Line 4: How does this work?
用上面的命令处理后,会输出:
Line 1: Let's test this
Line 2: Do you like these tools?
Line 3: Another line here
Line 4: How does this work?
内容的提问来源于stack exchange,提问作者Nithin
相关产品推荐
相关产品推荐

