Voici un script qui utilise une commande sed
qui le fera:
filename='cars'
make='toyota'
replacement='make=nissan|model=sentra|color=green'
sed "s/^make=$make.*/$replacement/" $filename
Il y a quelques problèmes avec la réponse de icarus127 que je fixe et adressé ici:
filename='cars'
saveIFS="$IFS"
IFS=$'\n'
# no need to call external cat, make the array at the same time the file is read
lines=($(<$filename))
# IMO, it's better and makes a difference to save and restore IFS instead of unsetting it
IFS="$saveIFS"
make='toyota'
replacement='make=nissan|model=sentra|color=green'
# the array variable MUST be quoted here or it won't work correctly
for line in "${lines[@]}"
do
# you can use Bash's regex matching to avoid repeatedly calling
# multiple external programs in a loop
if [[ $line =~ ^make=$make ]]
then
echo "$replacement"
else
echo "$line"
fi
done
Cependant, que (et les vers cat
ion) lit le fichier entier dans un tableau, ce qui pourrait être un problème s'il est grand. Il est préférable d'utiliser read
dans une boucle while
avec une redirection:
filename='cars'
make='toyota'
replacement='make=nissan|model=sentra|color=green'
while read -r line
do
# you can use Bash's regex matching to avoid repeatedly calling
# multiple external programs in a loop
if [[ $line =~ ^make=$make ]]
then
echo "$replacement"
else
echo "$line"
fi
done < "$filename"
vous avez montré votre fichier de données, montrent maintenant votre fichier réel que vous voulez faire une modification et décrire votre sortie finale par des exemples – ghostdog74