You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 12:27:08