заменить блок текста в файле linux

#bash #sed

#bash #sed

Вопрос:

Я хочу удалить блок текста в файле.

файл

       .
      .
      .
 "chromedriver": {
      "version": "80.0.2",
      .
      .
      .
   }
     },
 "ci-env": {
      .
      .
      .
  

Я хочу удалить атрибут chromedriver, который определяется в нескольких строках.

Я пробовал это:

sed -i 's/"chromedriver"(s|n|.)*"ci-env":/"ci-env":/g' file

но это не работает. Есть oneliner, который может решить мою проблему? Может ли sed это сделать?

Комментарии:

1. это json-файл? можете ли вы показать больше контента? в любом случае, при работе с json, jq гораздо лучше подходит, чем sed , awk и другие линейно ориентированные инструменты unix.

Ответ №1:

Использование jq , которое, как упоминалось в комментарии, является лучшим подходом для работы с JSON:

 jq 'del(.chromedriver)' file > file.tmp amp;amp; mv -f file.tmp file
  

(Угадайте соответствующий путь здесь, потому что данные вашего примера слишком отрывочны)

Ответ №2:

Редактирование на помощь!

 #!/bin/sh

cat >> edcut.txt << EOF
/chromedriver/
ka
/ci-env/
-1
kb
'a,'bd
wq
EOF

ed -s file.json < edcut.txt
  

если вы хотите извлечь запись в другой файл, замените ‘a’, bd на ‘a’,bW newfile.txt .