У меня есть файл.
$ cat file
"bar": false
"foo": false
Я должен заменить слово false
с true
только в шаблоне "foo": false
. Проблемой являются кавычки и пробелы.
Я думал приблизительно два пути:
Попытка в качестве примера 2 опций:
$ sed -i 's/\(.*foo\)/false/true\1/g' file
Это перестало работать.
Используйте адрес. Кавычки не являются проблемой, если вы заключите в кавычки выражение sed
$ sed '/"foo"/ s/false/true/' file
"bar": false
"foo": true
Если вам действительно нужно сопоставить весь шаблон, хорошо:
$ sed '/"foo": *false/ s/false/true/' file
"bar": false
"foo": true
*
соответствует любому номер предыдущего символа (пробел).
Вы также можете использовать \s
для сопоставления вкладок (любой горизонтальный пробел):
sed '/"foo":\s*false/ s/false/true/' file
Добавьте опцию -i
после тестирования, чтобы изменить исходный файл.