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

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

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 или замены шаблонов или расширения фигурных скобок?
  • сравнение 2 списков с дополнительными данными для печати
  • Удалите строку, если регулярное выражение существует только в 1-м столбце каждой строки в файле csv
  • Найдите и замените строку, если определенный шаблон найден в строке
  • Как комментировать snmpmibd и snmpd в rc.tcpip в AIX с помощью sed?
  • используйте gff2fasta вместо сценария bash, чтобы получить части ДНК-последовательностей из полного генома
  • sed backreference: получить каждую строку и добавить ее к концу строки
  • Запись команды команды в файл без использования перенаправления
  • 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 
    Interesting Posts
    Linux и Unix - лучшая ОС в мире.