如何使用Unix命令移除非空格起始行的换行符
用Unix命令合并非空格开头的行到前一行
方案1:使用awk
这是最直观的实现方式,核心逻辑是通过判断行首是否为空格,决定是换行打印还是追加到上一行:
awk 'NR==1{line=$0;next} /^ /{print line;line=$0;next} {line=line $0} END{print line}' input.txt
命令说明
NR==1{line=$0;next}:第一行直接存入变量line,跳过后续逻辑/^ /{print line;line=$0;next}:若当前行以空格开头,打印之前缓存的内容,再将当前行存入缓存{line=line $0}:若当前行不以空格开头,直接追加到缓存内容末尾END{print line}:处理完所有行后,打印最后缓存的合并内容
方案2:使用sed
借助sed的模式空间和暂存空间完成行合并,适合习惯sed语法的场景:
sed -n '1{h;b};/^ /{x;p;x};H;${x;p}' input.txt
命令说明
1{h;b}:第一行存入暂存空间,直接跳转到下一行/^ /{x;p;x}:若当前行以空格开头,交换暂存空间与模式空间,打印后再交换回去H:将当前行追加到暂存空间(不带换行符)${x;p}:处理到最后一行时,交换并打印暂存空间的内容
输入输出示例
输入文本
NOR2X2 U68695 (n102890) AO21X4 U68696 ( . A0(mbw4[84]) 311)
输出结果
NOR2X2 U68695 (n102890) AO21X4 U68696 ( .A0(mbw4[84])311)
内容的提问来源于stack exchange,提问作者Mahendra Gowda
相关产品推荐
相关产品推荐

