You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用awk/sed/grep合并非逗号开头的续行至前一行

合并多行短信内容为单行的实操方案

下面提供两种常用工具的实现方法,直接复制命令即可运行,处理后的每条短信会完整显示在单独一行:

使用awk处理

awk是处理这类文本场景最直观的工具,逻辑清晰易调整:

awk '
    /^,/ {
        if (line != "") print line
        line = $0
        next
    }
    {
        gsub(/^[[:space:]]+|[[:space:]]+$/, "")
        if ($0 != "") line = line " " $0
    }
    END { if (line != "") print line }
' input.txt > output.txt

逻辑说明:

  • 匹配以逗号开头的行(每条短信的起始行):若之前已积累了上一条短信的内容,则先输出;然后将当前行作为新的内容起点。
  • 非起始行:先移除首尾空白(避免多余空格),若不是空行则追加到当前积累的短信内容末尾。
  • 最后处理完所有行,输出最后一条短信内容。

使用sed处理

sed通过多行模式空间操作实现合并,适合喜欢单条命令的场景:

sed -e '/^,/!{H;$!d;}' -e 'x;s/\n[[:space:]]*/ /g' input.txt | sed '/^$/d' > output.txt

逻辑说明:

  • 第一部分:将所有不以逗号开头的行暂存到保持空间,非最后一行不输出。
  • 第二部分:交换模式空间与保持空间,把换行符及后续空白替换为单个空格,完成内容合并。
  • 最后通过管道调用sed移除空行(若不需要可去掉后半段)。

处理效果示例

原输入:

, NAME +18001112222, RECV, Text message contents.
, NAME +18001112222, RECV, Text message contents that are run over to 
the line below it.
, NAME +18001112222, SENT, Text message contents that have

multiple lines and empty lines!
, NAME +18001112222, SENT, Text Message contents  

处理后输出:

, NAME +18001112222, RECV, Text message contents.
, NAME +18001112222, RECV, Text message contents that are run over to the line below it.
, NAME +18001112222, SENT, Text message contents that have multiple lines and empty lines!
, NAME +18001112222, SENT, Text Message contents

内容的提问来源于stack exchange,提问作者Lincoln Washington

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 06:45:33