如何将起始模式{与结束模式}之间的多行内容合并为单行?
解决指定模式范围内多行转单行的问题
需求说明
当文本中出现起始模式{和结束模式}时,需将两者之间的所有多行内容合并为单行,同时调整周边文本格式(例如将结束模式后的内容移至下一行)。
原始输入内容
执行cat test.txt得到的内容:
qwe rty uio {asd fgh jkl zxc} vbn mqw rty
期望输出结果
qwe rty uio {asd fgh jkl zxc} vbn mqw rty
解决方案
使用awk命令即可实现该需求,通过状态标记判断是否处于需要合并的内容范围内:
awk '/{/{flag=1; sub(/{/,"{ "); printf "%s", $0; next} /}/{flag=0; sub(/}/," }"); printf " %s\n", $0; next} flag{printf " %s", $0; next} 1' test.txt
命令解释
- 匹配到
{时,设置状态标记flag=1,给{后添加空格,打印当前行并跳过后续处理; - 匹配到
}时,取消状态标记flag=0,给}前添加空格,打印当前行并换行; - 当
flag=1(处于合并范围内)时,以空格连接当前行内容,不换行; - 最后的
1表示打印所有未被上述规则处理的行(即不在合并范围内的行)。
内容的提问来源于stack exchange,提问作者Vishal Patel
相关产品推荐
相关产品推荐

