【问题标题】:Changing contents of a odbcinstini file in linux environment using shell script使用 shell 脚本在 linux 环境中更改 odbcinstini 文件的内容
【发布时间】:2021-07-15 07:11:16
【问题描述】:

odbcinst.ini 文件的内容是:

# Example driver definitions

# Driver from the postgresql-odbc package
# Setup from the unixODBC package
[PostgreSQL]
Description     = ODBC for PostgreSQL
Driver          = /usr/lib/psqlodbcw.so
Setup           = /usr/lib/libodbcpsqlS.so
Driver64        = /usr/lib64/psqlodbcw.so
Setup64         = /usr/lib64/libodbcpsqlS.so
FileUsage       = 1


# Driver from the mysql-connector-odbc package
# Setup from the unixODBC package
[MySQL]
Description     = ODBC for MySQL
Driver          = /usr/lib/libmyodbc5.so
Setup           = /usr/lib/libodbcmyS.so
Driver64        = /usr/lib64/libmyodbc5.so
Setup64         = /usr/lib64/libodbcmyS.so
FileUsage       = 1

这里我只想修改[Postgresql]下的Driver64行。

我尝试使用 sed 命令来做

sed -i 's/Driver64.*/Driver64=/usr/some/path/'

但这会改变 Driver64 的每个实例。如果将 [postgresql] 块放在其他地方,它可能无济于事。

【问题讨论】:

    标签: sed unixodbc


    【解决方案1】:

    对于您显示的示例,请尝试遵循awk 代码,这将仅在 PostgreSQL 之后替换文本,并且将保留与替换前行相同的空格。

    awk -v newPath="your_new_path" '
    /\[PostgreSQL\]/{ found=1 }
    found && /Driver64/{
      match($0,/^.*=[[:space:]]+/)
      $0=substr($0,RSTART,RLENGTH) newPath
    }
    1
    ' Input_file 
    

    以上将仅在终端上打印输出,一旦您对结果感到满意,则可以使用以下代码将输出保存到 Input_file 本身。

    awk -v newPath="your_new_path" '
    /\[PostgreSQL\]/{ found=1 }
    found && /Driver64/{
      match($0,/^.*=[[:space:]]+/)
      $0=substr($0,RSTART,RLENGTH) newPath
    }
    1
    ' Input_file > temp && mv temp Input_file
    

    【讨论】:

      猜你喜欢
      • 2013-05-27
      • 1970-01-01
      • 2020-09-08
      • 1970-01-01
      • 2021-01-26
      • 1970-01-01
      • 1970-01-01
      • 2015-03-02
      • 1970-01-01
      相关资源
      最近更新 更多