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

如何用Bash脚本移除文本文件换行符(syslog开头行除外)

修复损坏的Syslog日志文件(Bash实现)

要实现「移除随机插入的换行,仅保留以syslog头(<数字>)开头的行的换行」需求,用awk或sed都可以快速完成,以下是两种实用方案:

方案一:用awk实现(逻辑直观易维护)

awk是处理文本场景的首选工具,逻辑清晰且容易调整:

awk '
    # 匹配syslog头开头的行
    /^<[0-9]+>/ {
        if (line != "") print line  # 输出之前积累的内容
        line = $0                   # 开始新的一行
        next
    }
    # 非syslog头开头的行,追加到上一行
    { line = line " " $0 }
    # 脚本结束时输出最后一行内容
    END { if (line != "") print line }
' 损坏的日志文件名.txt > 修复后的日志文件名.txt

逻辑说明

  1. 当检测到以<数字>开头的行时,先输出之前拼接好的内容(如果有的话),然后将当前行作为新的起始行。
  2. 非syslog头开头的行,直接追加到当前积累的行末尾(加空格分隔)。
  3. 脚本结束前输出最后一行,避免丢失未处理的内容。

方案二:用sed实现(单行命令)

如果喜欢更简洁的单行命令,sed也能完成:

sed -e ':loop' -e '/^<[0-9]\+>/{$!N;s/\n\([^<]\)/ \1/;b loop}' 损坏的日志文件名.txt > 修复后的日志文件名.txt

逻辑说明

  1. 定义标签loop,用于循环处理多行。
  2. 读取下一行内容($!N,最后一行除外),如果下一行不是以<开头(即不是syslog头),就把换行符替换成空格。
  3. 重复执行循环,直到下一行是syslog头为止。

示例验证

原损坏日志:

<192> SeSystemtimePrivilege SeBackupPrivilege
SeRestorePrivilege
SeShutdownPrivilege
SeSystemEnvironmentPrivilege
SeUndockPrivilege
<198> SeShutdownPrivilege SeSystemEnvironmentPrivilege SeUndockPrivilege

修复后输出:

<192> SeSystemtimePrivilege SeBackupPrivilege SeRestorePrivilege SeShutdownPrivilege SeSystemEnvironmentPrivilege SeUndockPrivilege
<198> SeShutdownPrivilege SeSystemEnvironmentPrivilege SeUndockPrivilege

内容的提问来源于stack exchange,提问作者Mathis Legrand

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 05:15:49