Как изменить слово в файле с помощью сценария оболочки Linux - PullRequest
6 голосов
/ 30 января 2012

У меня есть текстовый файл, который имеет много строк У меня есть строка в этом: MyCar на

как я могу выключить мою машину?

Ответы [ 4 ]

12 голосов
/ 30 января 2012

Вы можете использовать sed:

sed -i 's/MyCar on/MyCar off/' path/to/file
1 голос
/ 31 января 2012

Вы можете сделать это только с оболочкой.В этом примере используется ненужный оператор case для этого конкретного примера, но я включил его, чтобы показать, как можно включить несколько замен.Хотя код больше, чем Sed 1-liner, он обычно намного быстрее, поскольку он использует только встроенные функции оболочки (целых 20x для небольших файлов).

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}"

для простого случая можно было бы опустить случайоператор:

while read LINE || [ "$LINE" ]; do
    OUTPUT="${OUTPUT}${LINE//$REPLACEOLD/$WITHNEW}
"; done < "${FILE}"
printf "${OUTPUT}" > "${FILE}"

Примечание: ... ||["$ LINE"] ... бит предназначен для предотвращения потери последней строки файла, которая не заканчивается новой строкой (теперь вы знаете хотя бы одну причину, по которой ваш текстовый редактор продолжает добавлять их)

0 голосов
/ 22 июля 2013

попробуйте эту команду внутри файла

:%s/old test/new text/g

0 голосов
/ 31 января 2012
sed 's/MyCar on/MyCar off/' >filename

больше на седь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...