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

diff命令输出格式优化及配置文件对比异常问题求助

问题1:diff结果按配置区块分类输出

原命令用sort会打乱配置文件的区块结构,导致diff输出的区块头与对应配置行分离。可以用awk替代现有命令,先提取差异行再按区块分组整理:

解决命令

diff <(sort file1.txt) <(sort file2.txt) | grep '>' | sed 's/> *//' | awk '
/^\[.*\]$/ { block=$0; next }
{ lines[block] = lines[block] $0 "\n" }
END {
    for (b in lines) {
        print b
        printf "%s", lines[b]
    }
}'

说明

  1. 先通过diff+grep+sed提取file2独有的内容
  2. awk识别[xxx]格式的区块头,将后续配置行归到对应区块下
  3. 最终按区块输出,每个区块仅显示一次,配置行跟随对应区块

测试示例文件后,输出与预期一致:

[HT]
a=24
[head]
c=4
[tail]
d=2
问题2:修复配置文件的重复区块与拆分行异常

针对重复的[mysqld]区块、拆分的配置行(如[mysqld].slow_query_log_file拆分为两行),用awk一次性修复:

修复命令

awk '
/^\[mysqld\]$/ { in_mysqld=1; if (!printed_block) { print; printed_block=1; next } else { next } }
in_mysqld {
    if (/^\[.*\]$/) { in_mysqld=0; print; next }
    if (prev_line ~ /^\[mysqld\]\./) {
        sub(/^\[mysqld\]\./, "", prev_line)
        $0 = prev_line $0
        gsub(/\n/, ".", $0)
        prev_line = ""
        print $0
    } else if (/\.$/ || /[^']$/) {
        prev_line = $0
    } else {
        print $0
    }
}
!in_mysqld { print }
' your_config_file.txt

说明

  1. 仅打印一次[mysqld]区块头
  2. 识别以[mysqld].开头的拆分行,拼接为完整配置行并将换行替换为.
  3. 处理跨换行的配置值(如拆分的文件路径),拼接后补全格式

测试错误示例后,输出修正后的内容:

[mysqld]
max_connections=200
max_user_connections=300
slow_query_log
query_cache_size=0
ignore_db_dir
slow_query_log_file='/home/slow_query.log'

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 21:30:04