Můžete použít sed:
sed -i 's/MyCar on/MyCar off/' path/to/file
Můžete to udělat pouze pomocí shellu. Tento příklad používá pro tento konkrétní příklad zbytečný případ, ale zahrnul jsem jej, abych ukázal, jak byste mohli začlenit více náhrad. Ačkoli je kód větší než sed 1-liner, je obvykle mnohem rychlejší, protože používá pouze zabudované shelly (až 20x pro malé soubory).
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}"
pro jednoduchý případ lze vynechat příkaz case:
while read LINE || [ "$LINE" ]; do
OUTPUT="${OUTPUT}${LINE//$REPLACEOLD/$WITHNEW}
"; done < "${FILE}"
printf "${OUTPUT}" > "${FILE}"
Poznámka:...|| [ "$LINE" ]... bit je zabránit ztrátě posledního řádku souboru, který nekončí novým řádkem (teď znáte alespoň jeden důvod, proč je váš textový editor stále přidává)