Linux环境下如何将txt文件中每组非缩进行与后续缩进行拼接为单行
解决方案
你可以用以下任意一种方法实现需求:
方法1:使用awk(推荐,兼容性好,逻辑清晰)
执行如下命令:
awk 'NR%2==1 {prev = $0; next} {gsub(/^[[:space:]]+/, "", $0); print prev, $0}' your_file.txt
命令说明:
NR%2==1:判断当前是奇数行(每组的第一行),将行内容存入prev变量后直接跳过后续处理- 处理偶数行(每组的第二行)时,先用
gsub(/^[[:space:]]+/, "", $0)删除行首的所有缩进空白(包含空格、制表符) - 最后将保存的上一行内容和处理后的当前行拼接输出,默认用空格分隔,符合预期格式
方法2:使用paste+sed组合
你之前的paste命令参数设置错误,正确用法如下:
paste -d ' ' - - < your_file.txt | sed -E 's/ +/ /g'
命令说明:
paste -d ' ' - -:每次读取两行内容,用空格作为分隔符合并为一行- 后续的sed命令将连续的多个空格(来自第二行的缩进)替换为单个空格,得到规整的输出
内容的提问来源于stack exchange,提问作者lana
相关产品推荐
相关产品推荐

