SED заменить после игнорирования

В текстовом файле много строк, и я хотел бы изменить значение true на false используя однострочный скрипт.

 bash-3.2$ grep online test.txt # online = false --> ONE SHOT import (delete all table contents before importing) # online = true --> DIFFERENTIAL import (import without clean the table contents) online = true 

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

 sed -i.bak '/DIFFERENTIAL\|/ONE SHOT\/!s/online.*/online = false/g' 

но он дал эту ошибку:

 sed: -e expression #1, char 17: unknown command: `O' 

Я не хочу, чтобы первые две строки менялись, только третий online = true чтобы стать online = false . Он может быть в любом месте файла, но он будет соответствовать online = . Поэтому я бы хотел, чтобы моя команда игнорировала 1 и 2 и меняла только 3.

2 Solutions collect form web for “SED заменить после игнорирования”

Если вы хотите изменить строки, начинающиеся с online , возможно, это проще всего сделать:

 sed 's/^online\ *=.*/online = false/g' 

Таким образом, строки, начинающиеся с # , полностью игнорируются.

Еще более простая (но не идентичная) альтернатива, предложенная @mikeserv:

 sed '/^online/s/true/false/' 

Через awk :

 awk '/online =/{c++} c==3{gsub("true","false")}1' test.txt 

Это будет соответствовать всем вхождениям online = и увеличивать флаг счетчика c++ ; Когда найдено 3 события c==3 , замените true на false .

  • Использование sed с переменной:
  • Regex & Sed / Perl: совместить слово, которому НЕ предшествует другое слово
  • Заменить слово после слова с добавочными значениями
  • как grep текст до следующего пространства?
  • awk + как добавить список в файл
  • sed: заменить текст строкой, содержащей специальные символы
  • Как сравнить столбцы одной строки в одном файле?
  • добавить обратную косую черту перед конкретным символом
  • Замена всех ненулевых результатов на «1» для формирования присутствия / отсутствия
  • поместите вкладку перед каждой выходной строкой на AIX / ksh
  • Как переименовать файлы с помощью sed?
  • Interesting Posts
    Linux и Unix - лучшая ОС в мире.