excluir linha que contém uma correspondência insensível a maiúsculas e minúsculas

2

Eu tenho um arquivo que contém informações assim:

20    BaDDOg
31    baddog
42    badCAT
43    goodDoG
44    GOODcAT

e desejo excluir todas as linhas que contenham a palavra dog . Esta é minha saída desejada:

42    badCAT
44    GOODcAT

No entanto, o caso de dog é insensível.

Eu pensei que poderia usar um comando sed: sed -e "/dog/id" file.txt , mas não consigo fazer isso funcionar. Tem algo a ver comigo trabalhando em um OSX? Existe algum outro método que eu possa usar?

    
por cosmictypist 05.02.2016 / 20:21

2 respostas

7

Experimente grep :

grep -iv dog inputfile

-i para ignorar maiúsculas e -v para inverter as correspondências.

Se você quiser usar sed , faça:

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

Em sed , há também o I flag, que deve tornar o caso de correspondência insensível, mas, até onde eu me lembro, isso não funciona em todos os sabores de sed . Para mim, isso funciona:

sed '/dog/Id' inputfile

mas pode muito bem ser que isso não funcione no OS X.

    
por 05.02.2016 / 20:26
1

A versão sed do OSX não é compatível com GNU; Não perca a flag i , como você pode ver na página man:

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.

Você pode instalar o gsed usando infusão com o comando

brew install gnu-sed

e, em seguida, você pode usar sed com a flag sem distinção entre maiúsculas e minúsculas, como esta:

gsed '/dog/Id' inputfile
    
por 25.12.2016 / 23:25