Удалить строку, содержащую нечувствительность к регистру

У меня есть файл, который содержит информацию так:

20 BaDDOg 31 baddog 42 badCAT 43 goodDoG 44 GOODcAT 

и я хочу удалить все строки, содержащие слово « dog . Это мой желаемый результат:

 42 badCAT 44 GOODcAT 

Однако случай с dog нечувствителен.

Я думал, что могу использовать команду sed: sed -e "/dog/id" file.txt , но я не могу заставить это работать. Это связано с тем, что я работаю над OSX? Есть ли другой метод, который я мог бы использовать?

  • Как использовать awk или sed для преобразования строк в столбцы
  • Переупорядочить текстовый файл путем добавления строк данных со строкой заголовка
  • Присоединиться: два файла - но только добавить последние два столбца
  • sed для удаления ведущего 91, если число равно 12 цифрам
  • извлечь столбец из большого текстового файла
  • Найти строку в одном разделе файла с несколькими разделами
  • Повторно распечатать массив в определенном формате?
  • Ошибка Sed, заменяющая частичную строку переменной
  • 2 Solutions collect form web for “Удалить строку, содержащую нечувствительность к регистру”

    Попробуйте grep :

     grep -iv dog inputfile 

    -i игнорировать регистр и -v чтобы инвертировать совпадения.

    Если вы хотите использовать sed вы можете сделать:

     sed '/[dD][oO][gG]/d' inputfile 

    В sed есть также флаг I , который должен сделать регистр соответствия нечувствительным, но, насколько я помню, это не работает во всех вкусах sed . Для меня это работает:

     sed '/dog/Id' inputfile 

    но вполне возможно, что это не работает на OS X.

    Версия sed OSX не соответствует GNU; он полностью пропускает флаг i как вы можете видеть на странице руководства:

     The value of flags in the substitute function is zero or more of the following: N Make the substitution only for the N'th occurrence of the regular expression in the pattern space. g Make the substitution for all non-overlapping matches of the regular expression, not just the first one. p Write the pattern space to standard output if a replacement was made. If the replacement string is identical to that which it replaces, it is still considered to have been a replacement. w file Append the pattern space to file if a replacement was made. If the replacement string is identical to that which it replaces, it is still considered to have been a replacement. 

    Вы можете установить gsed с помощью варева с помощью команды

     brew install gnu-sed 

    и тогда вы можете использовать sed с флагом, не учитывающим регистр, следующим образом:

     gsed '/dog/Id' inputfile 
    Linux и Unix - лучшая ОС в мире.