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

如何使用sed/awk将多行LTM Pool配置合并为单行?

合并LTM Pool多行配置为单行的sed/awk实现方法

我有一个包含LTM Pool配置的文件,原始内容如下:

ltm pool /Common/foo_mim_pool {
    members {
        /Common/mim-foo-010101-1:5222 {
            address 10.22.1.161
        }
    }
}
ltm pool /Common/foo_ts_pool {
    members {
        /Common/ts-vx-010101-1:6698 {
            address 10.20.1.68
        }
        /Common/ts-vx-010101-1:6699 {
            address 10.20.1.68
        }
        /Common/ts-vx-010101-2:6698 {
            address 10.21.1.199
        }
        /Common/ts-vx-010101-2:6699 {
            address 10.21.1.199
        }
    }
    monitor /Common/ts_monitor
}

需要将每个LTM Pool的多行配置合并为单行,预期结果如下:

ltm pool /Common/foo_mim_pool { members { /Common/mim-foo-010101-1:5222 { address 10.22.1.161 } } }
ltm pool /Common/foo_ts_pool { members { /Common/ts-vx-010101-1:6698 { address 10.20.1.68 } /Common/ts-vx-010101-1:6699 { address 10.20.1.68 } /Common/ts-vx-010101-2:6698 { address 10.21.1.199 } /Common/ts-vx-010101-2:6699 { address 10.21.1.199 } } monitor /Common/ts_monitor }

我尝试了以下命令,但未得到预期结果:

paste -d " " - - - - - - - - < file.txt
awk 'NR%2{printf "%s ",$0;next;}1' file.txt

解决方案

方法1:使用sed实现

通过匹配pool的起始和结束标记,将块内换行替换为空格并去除冗余缩进:

sed -n '/^ltm pool/{:a;N;/}$/!ba;s/\n[[:space:]]*/ /g;p}' file.txt
  • 逻辑说明:
    • /^ltm pool/{:定位到每个pool的起始行,开始处理
    • :a;N;/}$/!ba:循环读取后续行,直到遇到以}结尾的pool结束行
    • s/\n[[:space:]]*/ /g:把所有换行符及后续的缩进空格替换为单个空格
    • p:输出合并后的单行配置

方法2:使用awk实现

通过跟踪pool配置块的状态,累积内容后统一输出:

awk '/^ltm pool/{block=$0; next} /}$/{block=block " " $0; gsub(/[[:space:]]+/," ",block); print block; block=""; next} {block=block " " $0}' file.txt
  • 逻辑说明:
    • /^ltm pool/{block=$0; next}:遇到pool起始行,初始化存储块并跳过后续处理
    • /}$/{...}:遇到pool结束行,将当前行加入块,替换连续空格为单个空格后输出,再重置存储块
    • {block=block " " $0}:将pool块内的其他行追加到存储块中

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 11:27:28