【问题标题】:Regular expression required for replacing string in shell script在 shell 脚本中替换字符串所需的正则表达式
【发布时间】:2013-12-02 06:42:56
【问题描述】:

谁能帮我在 linux 中编写一个 shell 脚本来替换特定文件中的主机名。

例如:我有多个具有特定 IP 地址的文件。

http://10.160.228.12:8001/soa-infra/services/default/AIAAsyncErrorHandlingBPELProcess/client?WSDL

http://VQAIAAPPDEV:8001/soa-infra/services/default/AIAAsyncErrorHandlingBPELProcess/client?WSDL

基本上我想用任何必需的字符串替换“http://”和“:8001”之间的字符串。

谁能帮帮我。

更多信息:-

我想在多个文件夹中迭代地执行此操作。所以基本上它会搜索每个文件夹中的所有文件并执行必要的更改。

【问题讨论】:

    标签: regex linux shell


    【解决方案1】:

    您可以使用sed。说:

    sed -r 's|(http://)([^:]*)(:8001)|\1something\3|g' filename
    

    会将“http://”和“:8001”之间的字符串替换为something。

    如果您想就地更改文件,请使用-i 选项:

    sed -i -r 's|(http://)([^:]*)(:8001)|\1something\3|g' filename
    

    【讨论】:

    • 如果我想迭代地签入多个文件夹中的文件并进行必要的更改怎么办?
    • @user3056318 使用find。你可以说:find /some/path -type f -exec sed -i -r 's|(http://)([^:]*)(:8001)|\1something\3|g' {} \;
    • @user3056318 如果对您有用,请考虑 accepting the answer。您可能还想参考this。
    【解决方案2】:

    在 Linux shell 中使用 sed 命令

    sed -i 's%OldHost%NewHost%g' /yourfolder/yourfile

    【讨论】:

      【解决方案3】:

      用“for”试过

       # cat replace.txt
       http://10.160.228.12:8001/soa-     infra/services/default/AIAAsyncErrorHandlingBPELProcess/client?WSDL
      
       http://VQAIAAPPDEV:8001/soa-infra/services/default/AIAAsyncErrorHandlingBPELProcess/client?WSDL
      
      
       # for i in `cat replace.txt | awk -F: '{print $2}' | sed 's/^\/\///g' | sed '/^$/d'` ; do sed -i "s/$i/Your_hostname/"  replace.txt ; done
      
       # cat replace.txt
       http://Your_hostname:8001/soa- infra/services/default/AIAAsyncErrorHandlingBPELProcess/client?WSDL
      
       http://Your_hostname:8001/soa-infra/services/default/AIAAsyncErrorHandlingBPELProcess/client?WSDL
      

      它对我有用...!

      【讨论】:

        猜你喜欢
        • 2018-07-13
        • 1970-01-01
        • 2017-02-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多