sed匹配指定模式时输出匹配行前2行及到文件尾所有行的方法
sed 实现方案
直接执行以下命令即可得到目标输出:
sed ' 1c<p>Output</p> /^def/{ x s/^\n// s/\(.*<code>\).*/\1/ G p :loop n p b loop } H d ' 你的输入文件路径
执行逻辑说明
- 首行直接替换为要求的
<p>Output</p>输出 - 读取到以
def开头的行之前,所有内容暂存到内存保持空间,不直接打印 - 命中
^def匹配行时,先取出暂存的前置内容做处理:- 删掉暂存内容开头多余的换行符
- 把
<code>标签后不需要的tyu内容移除,仅保留标签本身 - 拼接当前匹配到的
def行,此时内容刚好是匹配行前2行(空行、abc)+ 匹配行本身,连带标签一起打印
- 命中匹配行后进入打印循环,逐行读取后续所有内容直接输出,直到文件末尾
纯文本场景适配:如果处理的是无HTML标签的纯文本内容,只需要把命令中
s/\(.*<code>\).*/\1/这一行替换为s/^[^\n]*\n//即可,作用是删除暂存的最早一行无用内容,仅保留匹配行之前最近的2行内容。
内容的提问来源于stack exchange,提问作者Tathastu Pandya
相关产品推荐
相关产品推荐

