如何用单条Sed命令完成三类指定文本处理并输出到新文件?
Sed单命令实现多文本处理需求
最终合并命令
sed -E '/^{master}$/{$!N;/\n.*@.*>.*\|.*$/d}; /^[A-Za-z]{3}\s*[0-9]{1,2}\s[0-9]{2}:[0-9]{2}:[0-9]{2}$/d; s/^<rpc-reply>$/<rpc-reply">/; /^<\/rpc-reply>$/a <ENDSTRING}' input.txt > output.txt
各操作细节解释
- 删除目标格式上方的{master}行
用/^{master}$/{$!N;/\n.*@.*>.*\|.*$/d}实现:匹配到单独的{master}行后,读取下一行($!N避免处理最后一行时出错),如果下一行符合string@string>string|string的格式(.*@.*>.*\|.*兼容>、|前后有无空格的情况),就删除这两行。 - 删除目标格式下方的日期行
启用扩展正则(-E参数)后,用/^[A-Za-z]{3}\s*[0-9]{1,2}\s[0-9]{2}:[0-9]{2}:[0-9]{2}$/d匹配并删除日期行,解决了基础正则不支持{n}语法的问题。 - 修改
并追加 s/^<rpc-reply>$/<rpc-reply">/:精准替换单独的<rpc-reply>行,在末尾添加双引号/^<\/rpc-reply>$/a <ENDSTRING>:匹配到</rpc-reply>行后,在该行下方追加<ENDSTRING>
示例验证
输入文本
{master}
test@test-re0> show version | display xml
Oct 14 22:55:58test@test-re0> show hardware|display xml
Jan 04 01:55:58
输出文本
test@test-re0> show version | display xml
<rpc-reply">test@test-re0> show hardware|display xml
内容的提问来源于stack exchange,提问作者Knightfox
相关产品推荐
相关产品推荐

