Você pode simplificar o conjunto de substituições "semelhantes" sed para o seguinte:
%pre%Uso :
%pre%A saída:
%pre%Estou tentando escrever um script de construção para o SLES / RHEL que modifica os arquivos de configuração para estar em conformidade com os padrões da nossa empresa. Algumas configurações são formatadas como configuração = valor e algumas são apenas valores de configuração. Estou usando sed atualmente e sinto que estou quase lá, mas não está funcionando quando não há sinal de igual.
Código atual: (Desculpe, não sou muito bom em formatá-los corretamente ainda ...)
%pre%Função atual (teste):
%pre%No entanto, recebo isso como resultado:
%pre%Funciona se eu tirar a última porção sed, mas somente onde houver um sinal de igual.
Alguma idéia do que estou fazendo errado?
Você pode simplificar o conjunto de substituições "semelhantes" sed para o seguinte:
%pre%Uso :
%pre%A saída:
%pre%É suficiente seguir a variável por espaço ou sinal de igual, então uma substituição serve para todos.
Ao usar a opção %code% e o %code% após a substituição, você não precisa do %code% . O %code% já usou a linha certa.
Estou tentando escrever um script de construção para o SLES / RHEL que modifica os arquivos de configuração para estar em conformidade com os padrões da nossa empresa. Algumas configurações são formatadas como configuração = valor e algumas são apenas valores de configuração. Estou usando sed atualmente e sinto que estou quase lá, mas não está funcionando quando não há sinal de igual.
Código atual: (Desculpe, não sou muito bom em formatá-los corretamente ainda ...)
$ cat test.conf
setting1 value1
setting2= value2
setting3 = value3
setting4 =value4
Função atual (teste):
#!/bin/bash
replace () {
file=$1
var=$2
new_value=$3
sed -e "s/^$var=.*/$var = $new_value/" -e "s/^$var =.*/$var = $new_value/" -e "s/^$var.*/$var = $new_value/" -e "s/^$var /$var $new_value/" "$file"|grep $var
}
replace test.conf setting1 value1new
replace test.conf setting2 value2new
replace test.conf setting3 value3new
replace test.conf setting4 value4new
No entanto, recebo isso como resultado:
$ ./functiontest
setting1 value1new= value1new
setting2 value2new= value2new
setting3 value3new= value3new
setting4 value4new= value4new
Funciona se eu tirar a última porção sed, mas somente onde houver um sinal de igual.
Alguma idéia do que estou fazendo errado?
Você pode simplificar o conjunto de substituições "semelhantes" sed para o seguinte:
cat replace.sh
#!/bin/bash
replace () {
var=$2
new_val=$3
sed -e "s/^$var *= *.*/$var = $new_val/; s/^$var [^=]*$/$var $new_val/" "$1" | grep $var
}
replace test.conf setting1 value1new
replace test.conf setting2 value2new
replace test.conf setting3 value3new
replace test.conf setting4 value4new
Uso :
bash replace.sh
A saída:
setting1 value1new
setting2 = value2new
setting3 = value3new
setting4 = value4new
sed -n "s/^$var[ =].*/$var = $new_value/p" "$file"
É suficiente seguir a variável por espaço ou sinal de igual, então uma substituição serve para todos.
Ao usar a opção -n
e o p
após a substituição, você não precisa do grep
. O sed
já usou a linha certa.
Tags configuration sed scripting