【问题标题】:change multiple files content by the file name通过文件名更改多个文件内容
【发布时间】:2017-06-29 18:57:41
【问题描述】:

我有几个文件,文件名如果vhost-<someport>.conf,我想用文件名$port vhost-$port.conf替换每个文件中带有端口号的行。

例如vhost-8081.conf 文件将包含listen 8081 行,vhost-8082.conf 文件将包含listen 8082; 行等。

vhost-8081.conf
vhost-8082.conf
etc..

server {
    listen 8081;
    }

server {
    listen 8082;
    }

【问题讨论】:

    标签: bash for-loop sed


    【解决方案1】:

    这可能是你想要的:

        for file in vhost-*.conf
        do     num=${file#vhost-}
        sed -i  "s/listen .*/vhost-$num;/" "$file"
        done
    
        cat vhost*
        server {
        vhost-8081.conf;
        }
        server {
        vhost-8082.conf;
    

    【讨论】:

      【解决方案2】:

      如果您有名为vhost-NUM.conf 的文件,则可以去掉vhost- 前缀和.conf 后缀以提取端口号,然后使用sed -ilisten .* 替换为就地编号,更新文件:

      for file in vhost-*.conf; do
          num=${file#vhost-}
          num=${num%.conf}
          sed -i "s/listen .*/listen $num;/" "$file"
      done
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-09-02
        • 2016-05-09
        • 2020-09-08
        • 2013-05-05
        • 2020-10-23
        • 2020-06-28
        相关资源
        最近更新 更多