2017-02-11 9 views
2

У меня мало файлов, имя файлов, если 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; 
    } 

ответ

1

Если у вас есть файлы с именем vhost-NUM.conf, то вы можете лишить префикс vhost- и суффикс .conf для извлечения номера порта, а затем используйте sed -i для замены listen .* с номером на месте, обновляя файл:

for file in vhost-*.conf; do 
    num=${file#vhost-} 
    num=${num%.conf} 
    sed -i "s/listen .*/listen $num;/" "$file" 
done 
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;