Vous pouvez utiliser sed :
sed -i 's/MyCar on/MyCar off/' path/to/file
Vous ne pouvez le faire qu'avec le shell. Cet exemple utilise une instruction case inutile pour cet exemple particulier, mais je l'ai incluse pour montrer comment vous pouvez incorporer plusieurs remplacements. Bien que le code soit plus volumineux qu'un sed 1 ligne, il est généralement beaucoup plus rapide car il n'utilise que des commandes internes du shell (jusqu'à 20x pour les petits fichiers).
REPLACEOLD="old"
WITHNEW="new"
FILE="tmpfile"
OUTPUT=""
while read LINE || [ "$LINE" ]; do
case "$LINE" in
*${REPLACEOLD}*)OUTPUT="${OUTPUT}${LINE//$REPLACEOLD/$WITHNEW}
";;
*)OUTPUT="${OUTPUT}${LINE}
";;
esac
done < "${FILE}"
printf "${OUTPUT}" > "${FILE}"
pour le cas simple, on pourrait omettre l'instruction case :
while read LINE || [ "$LINE" ]; do
OUTPUT="${OUTPUT}${LINE//$REPLACEOLD/$WITHNEW}
"; done < "${FILE}"
printf "${OUTPUT}" > "${FILE}"
Remarque :le ...|| [ "$LINE" ]... bit est d'éviter de perdre la dernière ligne d'un fichier qui ne se termine pas par une nouvelle ligne (vous savez maintenant au moins une raison pour laquelle votre éditeur de texte continue d'en ajouter)