按文件名更改多个文件内容

时间:2017-02-11 12:57:45

标签: bash for-loop sed

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

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

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

server {
    listen 8081;
    }

server {
    listen 8082;
    }

2 个答案:

答案 0 :(得分:1)

如果您有名为vhost-NUM.conf的文件,则可以删除vhost-前缀和.conf后缀以提取端口号,然后使用sed -i替换{ {1}}使用就地编号,更新文件:

listen .*

答案 1 :(得分:0)

这可能是你想要的:

    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;