Замена строк в файле с помощью скрипта

Как правильно задавать вопросы Правильно сформулированный вопрос и его грамотное оформление способствует высокой вероятности получения достаточно содержательного и по существу ответа. Общая рекомендация по составлению тем: 1. Для начала воспользуйтесь поиском форума. 2. Укажите версию ОС вместе с разрядностью. Пример: LM 19.3 x64, LM Sarah x32 3. DE. Если вопрос касается двух, то через запятую. (xfce, KDE, cinnamon, mate) 4. Какое железо. (достаточно вывод inxi -Fxz в спойлере (как пользоваться спойлером смотрим здесь)) или же дать ссылку на hw-probe 5. Суть. Желательно с выводом консоли, логами. 6. Скрин. Просьба указывать 2, 3 и 4 независимо от того, имеет ли это отношение к вопросу или нет. Так же не забываем об общих правилах Как пример вот
no avatar

Автор темы
ogankvik
Сообщения: 177
Зарегистрирован: 22 ноя 2019, 19:12
Благодарил (а): 95 раз
Поблагодарили: 9 раз
Контактная информация:

Замена строк в файле с помощью скрипта

#1

13 апр 2022, 11:08

Linux Mint 19.3 x64 Cinnamon.

Здравствуйте. Есть файл в котором при каждом запуске нужно менять две строки. Создал скрипт, но он не работает. Подскажите, как правильно сделать замену строк?

В файле config.json есть две строки:

Код: Выделить всё

"focused": true,
"visible": true,
Нужно сделать скрипт, меняющий эти строки на :

Код: Выделить всё

"focused": false,
"visible": false,
Создал скрипт:

Код: Выделить всё

#!/bin/bash
sed 's/"focused": true,/"focused": false,/2' config.json
sed 's/"visible": true,/"visible": false,/2g' config.json
exit 0
Но он не меняет строки. Что я делаю не так? Помогите пожалуйста.

Решение rogoznik » 13 апр 2022, 12:11
ogankvik, собственно ты был близок, но то ли читал невнимательно, то ли статья такая попалась.
Должно быть так

Код: Выделить всё

#!/bin/bash
sed -i 's/"focused": true,/"focused": false,/' config.json
sed -i 's/"visible": true,/"visible": false,/' config.json
exit 0
Флаг g есть смысл использовать, если таких строк несколько и надо заменить в каждой, т.е. глобально(во всем файле). Без этого флага будет заменено только в первой попавшейся строке
Ключ -i говорит sed что надо изменения писать в файл, а не в stdout

Перейти к ответу ➙

Аватара пользователя

Sharov
Сообщения: 151
Зарегистрирован: 10 фев 2022, 23:53
Благодарил (а): 84 раза
Поблагодарили: 22 раза
Контактная информация:

Замена строк в файле с помощью скрипта

#2

13 апр 2022, 11:44

sed -e "s/$old_pattern/$new_pattern/g" $file_name
...
Яндекс в помощь:
https://www.opennet.ru/docs/RUS/bash_sc ... 14586.html
i3-3210 / 10GB / VGA Intel HD 2500 / SSD 240GB / Kernel 6.6.12

Аватара пользователя

rogoznik
Сообщения: 10044
Зарегистрирован: 27 июн 2017, 13:36
Решено: 129
Откуда: Нижний Тагил
Благодарил (а): 776 раз
Поблагодарили: 1956 раз
Контактная информация:

Замена строк в файле с помощью скрипта

#3

13 апр 2022, 12:11

ogankvik, собственно ты был близок, но то ли читал невнимательно, то ли статья такая попалась.
Должно быть так

Код: Выделить всё

#!/bin/bash
sed -i 's/"focused": true,/"focused": false,/' config.json
sed -i 's/"visible": true,/"visible": false,/' config.json
exit 0
Флаг g есть смысл использовать, если таких строк несколько и надо заменить в каждой, т.е. глобально(во всем файле). Без этого флага будет заменено только в первой попавшейся строке
Ключ -i говорит sed что надо изменения писать в файл, а не в stdout
ИзображениеИзображение

no avatar

Автор темы
ogankvik
Сообщения: 177
Зарегистрирован: 22 ноя 2019, 19:12
Благодарил (а): 95 раз
Поблагодарили: 9 раз
Контактная информация:

Замена строк в файле с помощью скрипта

#4

13 апр 2022, 12:20

Большое спасибо! Пару минут назад тоже сообразил, что замена отлично работает, но только в консоли, не сохраняя результат в файл :). Проблема решена!

Закрыто

Вернуться в «Вопрос новичка и FaQ»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 7 гостей