如何用Shell脚本在odbc.ini的[Test]节末尾添加参数?
解决ODBC.ini中向指定节末尾添加配置的问题
现有odbc.ini内容:
[Test] Driver=/path/to/driver Database=test_db [AnotherSection] Driver=/another/pathhere
原sed命令会把Password=5432添加到[Test]行的下一行,无法满足添加到节末尾的需求,以下是两种可行方案:
方案一:使用sed命令
sed -n ' /^\[Test\]/ { :test_section p n if (/^\[/ || /^$/) { i\Password=5432 p b rest } b test_section } p :rest ' odbc.ini
命令说明:
-n:关闭默认输出,仅打印指定内容- 匹配到
[Test]行时进入循环:- 打印当前行并读取下一行
- 若下一行是新节(以
[开头)或空行,先插入Password=5432,再打印该行,随后跳转处理剩余内容 - 否则继续循环处理Test节的每一行
- 非Test节的行直接打印
方案二:使用awk脚本(更易读维护)
awk ' /^\[Test\]/ { in_test = 1 } in_test && (/^\[/ || $0 == "") { print "Password=5432" in_test = 0 } { print } END { if (in_test) print "Password=5432" } ' odbc.ini
脚本说明:
- 匹配到
[Test]时,标记in_test=1,表示进入Test节 - 处于Test节内时,若遇到新节开头或空行,先打印
Password=5432,再关闭标记 - 打印所有行(包括Test节内容、空行及其他节内容)
- 若文件结束时仍处于Test节(Test为最后一个节),则追加
Password=5432
内容的提问来源于stack exchange,提问作者user3795378
相关产品推荐
相关产品推荐

