Trouvé ce fil parmi d'autres, et je suis d'accord qu'il contient la plus complète de réponses donc j'ajoute la mienne aussi:
1) sed et ed sont donc useful...by main!!!
Regardez ce code à partir de @Johnny:
sed -i -e 's/abc/XYZ/g' /tmp/file.txt
2) quand mon restriction est de l'utiliser dans un script shell, alors, aucune variable ne peut être utilisé à l'intérieur à la place de l'abc ou XYZ! Cela semble d'accord avec ce que je comprends au moins. Donc, je ne peux pas utiliser:
x='abc'
y='XYZ'
sed -i -e 's/$x/$y/g' /tmp/file.txt
#or,
sed -i -e "s/$x/$y/g" /tmp/file.txt
mais, que pouvons-nous faire? Comme, @Johnny, a déclaré l'utilisation d'un tout lu...", mais, malheureusement, ce n'est pas la fin de l'histoire. La suite a bien fonctionné avec moi:
#edit user's virtual domain
result=
#if nullglob is set then, unset it temporarily
is_nullglob=$( shopt -s | egrep -i '*nullglob' )
if [[ is_nullglob ]]; then
shopt -u nullglob
fi
while IFS= read -r line; do
line="${line//'<servername>'/$server}"
line="${line//'<serveralias>'/$alias}"
line="${line//'<user>'/$user}"
line="${line//'<group>'/$group}"
result="$result""$line"'\n'
done < $tmp
echo -e $result > $tmp
#if nullglob was set then, re-enable it
if [[ is_nullglob ]]; then
shopt -s nullglob
fi
#move user's virtual domain to Apache 2 domain directory
......
3) Comme on peut le voir si nullglob est définie, alors, il se comporte étrangement quand il y a une chaîne de caractères contenant un * comme dans
<VirtualHost *:80>
ServerName www.example.com
qui devient
<VirtualHost ServerName www.example.com
il n'y a pas de fin, équerre de fixation et Apache2 peut pas charger même!
4) Ce type d'analyse devrait être plus lente que d'un coup de recherche et de remplacement, mais, comme vous avez déjà vu, il y a 4 variables pour 4 différents modèles de recherche de travail de l'un seulement d'analyser le cycle de!
La solution la plus adaptée je pense, avec les hypothèses du problème.