Как изменить содержимое файла? [дубликат]

Если вам нужно что-то простое, но не блокирующее, добавьте следующее в /etc/rc.local:

( sleep 60 && /path/to/command_or_script [opts] ) &
0
24.11.2018, 22:28
3 ответа

Этого легко добиться с помощью команды sed .
Просто введите:

sed 's/true/false/' file > newfile
0
28.01.2020, 02:14

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

sed -e 's|<tag1>false</tag1>|<tag1>true</tag1>|g' -i file

, хотя я рекомендую отредактировать копию файла,

sed -e 's|<tag1>false</tag1>|<tag1>true</tag1>|g' file > newfile

и использовать less , чтобы проверить, приемлемо ли новое содержимое; т.е.

less newfile

Отредактировано: обратите внимание на модификатор g в конце шаблона. Это необходимо, если на строке может быть более одного совпадения. Если присутствует g , это означает, что все совпадения в строке заменяются. Кроме того, вместо полных тегов вы можете использовать только

sed -e 's|>false<|>true<|g' file > newfile

или, возможно,

sed -e 's|>[Ff]alse<|>true<|g' file > newfile

, что изменяет оба > false < и > False < на > true <.

Вы можете использовать diff для сравнения двух файлов после использования одной из команд выше. Один из вариантов -

diff --side-by-side file newfile | less

, но он не работает, если строки очень длинные. Обычно используется формат «unified diff» ,

diff -u file newfile | less

где строки, начинающиеся с - , взяты из файла , строки начинаются с + из newfile , и строки, начинающиеся с пробела, являются общими для обоих.

5
28.01.2020, 02:14

Если вы хотите заменить только точные вхождения от

<tag1>true</tag1>

до

<tag1>false</tag1>

, вы можете использовать

sed -r 's@<(tag1)>true</\1>@<\1>false</\1>@g' infile >outfile

или

sed -ri 's@<(tag1)>true</\1>@<\1>false</\1>@g' file

, если вы не хотите записывать измененные данные в новый файл.

2
28.01.2020, 02:14

Теги

Похожие вопросы