How to change a word in a file with linux shell script
You could use sed:
sed -i 's/MyCar on/MyCar off/' path/to/file
You can do this with shell only. This example uses an unnecessary case statement for this particular example, but I included it to show how you could incorporate multiple replacements. Although the code is larger than a sed 1-liner it is typically much faster since it uses only shell builtins (as much as 20x for small files).
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}"
for the simple case one could omit the case statement:
while read LINE || [ "$LINE" ]; do
OUTPUT="${OUTPUT}${LINE//$REPLACEOLD/$WITHNEW}
"; done < "${FILE}"
printf "${OUTPUT}" > "${FILE}"
Note: the ...|| [ "$LINE" ]... bit is to prevent losing the last line of a file that doesn't end in a new line (now you know at least one reasone why your text editor keeps adding those)