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

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

20 BaDDOg 31 baddog 42 badCAT 43 goodDoG 44 GOODcAT 

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

 42 badCAT 44 GOODcAT 

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

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

  • sed - как удалить все строки, которые не совпадают
  • печатать пустую строку в sed output при передаче нескольких имен файлов
  • Необходимо взять четвертое слово строки и скопировать его в начало строки (sed awk)
  • Awk / sed: добавить номера строк в текст из диапазона
  • Как grep заголовок в man-странице, содержащей управляющие символы
  • pcregrep не работает из-за ошибки сегментации
  • вернуть первый экземпляр символов из списка
  • Скопируйте текстовые строки из файла и добавьте их в один и тот же файл с префиксом средней линии или удалите префикс средней строки
  • 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 - лучшая ОС в мире.