【问题标题】:find and replace a string in a file using sed使用 sed 查找和替换文件中的字符串
【发布时间】:2014-11-12 22:31:46
【问题描述】:

我有一个文件odbc.ini,其中包含以下文本

[DB2DB]
DRIVER=libdb2Wrapper.so
Description=DB2DB DB2 ODBC Database
Database=DB2DB
[EBAICIMS]
DRIVER=libdb2Wrapper.so
Description=DB ALIAS 
Database=EBAICIMS
[EBAIPDMD]
DRIVER=libdb2Wrapper.so
Description=DB ALIAS 
Database=EBAIPDMD
[EBAIRELS]
DRIVER=libdb2Wrapper.so
Description=DB ALIAS 
Database=EBAIRELS
[POLICYD]
DRIVER=libdb2Wrapper.so
Description=DB2 alias to connect
Database=POLICYD
[JDCUCCD]
DRIVER=libdb2Wrapper.so
Description=DB2DB DB2 ODBC Database
Database=JDCUCCD
[POLICYQ]
DRIVER=libdb2Wrapper.so
Description=DB2 alias to connect
Database=POLICYQ
[POLICYM]
DRIVER=libdb2Wrapper.so
Description=DB2 alias to connect
Database=POLICYM

我正在尝试用/home/inst8/sqllib/libdb2o.so 替换此文件中的libdb2Wrapper.so

我正在尝试使用 sed 在一行中执行此操作,但它不起作用。 我用了 sed 's/libdb2Wrapper.so/~/home/inst8/sqllib/libdb2o.so/g' -i odbc.ini 我也尝试使用反斜杠作为转义字符,但它没有用。也许我在使用转义字符时做错了。 请帮忙。

【问题讨论】:

  • sed 在什么情况下不起作用?它没有打印任何东西吗?它是否打印了错误消息?

标签: regex sed


【解决方案1】:

为避免需要反斜杠,请为 sed 使用不同的分隔符:

sed -i~ -e 's=libdb2Wrapper.so=~/home/inst8/sqllib/libdb2o.so=g' odbc.ini

【讨论】:

  • 非常感谢。我想我在转义字符上犯了一个错误。我现在正在使用这个sed -i 's=libdb2Wrapper.so=/home/inst8/sqllib/libdb2o.so=g' odbcLAB.ini
【解决方案2】:

虽然您不需要展示解决问题的所有尝试,但您意识到它可能正在转义 / 字符,这是您的问题,最好在您的问题中包含该尝试。

试试

sed -i '@libdb2Wrapper.so@\~/home/inst8/sqllib/libdb2o.so@g' odbc.ini

您可能需要转义 ~ 字符,因为它通常表示“所有匹配的内容”

一些年长的seds 如果他们没有看到/ 作为第一个字符,他们会感到困惑,但大多数人会理解 ans escaped first char,即

sed -i '\@libdb2Wrapper.so@\~/home/inst8/sqllib/libdb2o.so@g' odbc.ini  

最后,请注意,您可以使用任何字符作为初始 reg-ex 包装器,只要确保它不在您的目标文本或替换文本中即可。

IHTH

【讨论】:

    猜你喜欢
    • 2013-03-23
    • 2011-09-04
    • 2017-06-10
    • 2020-11-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-01
    相关资源
    最近更新 更多