Замена строки с кавычками выборочно с помощью sed

У меня есть файл.

$ cat file
"bar":  false
"foo":  false

Я должен заменить слово false с true только в шаблоне "foo": false. Проблемой являются кавычки и пробелы.

Я думал приблизительно два пути:

  1. Изолировать целый шаблон в своего рода кавычках qoutes/double.
  2. Заменять только такую "ложь", которая имеет "нечто" перед ним.

Попытка в качестве примера 2 опций:

$ sed -i 's/\(.*foo\)/false/true\1/g' file

Это перестало работать.

3
задан 30 May 2018 в 08:51

1 ответ

Используйте адрес. Кавычки не являются проблемой, если вы заключите в кавычки выражение 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 после тестирования, чтобы изменить исходный файл.

8
ответ дан 1 December 2019 в 13:15

Другие вопросы по тегам:

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