Exclui todas as ocorrências de qualquer palavra que corresponda a uma string parcial em sed

2

Suponha que eu tenha a seguinte linha:

group blue:green yellow green redtomblue black !greyTOMwhilte !purple redblue

Eu preciso excluir de todas as palavras que contenham a string "tom" ou "TOM" usando sed.

Eu consegui chegar até aqui:

sed 's/^ *\(.*\)[!]*[A-Za-z0-9_]*[tT]\{1\}[oO]\{1\}[mM]\{1\}[A-Za-z0-9_]*\(.*\)/ /g'

Mas isso exclui apenas a ocorrência última , não todas. Usando meu exemplo acima, o resultado é:

group blue:green yellow green redtomblue black !grey  !purple redblue

Como posso usar sed para remover qualquer palavra que contenha uma das substrings específicas "tom" ou "TOM"?

    
por Sims 18.07.2011 / 10:44

1 resposta

1

E esse aqui?

sed 's/\S*\(tom\|TOM\)\S*//g'

resp. em versões não-GNU de sed , isso deve funcionar:

sed 's/[a-zA-Z0-9_!]*[Tt][Oo][Mm][a-zA-Z0-9_!]*//g'

Isso substituirá todas as palavras (ou seja, strings começando com 0 ou mais caracteres que não sejam espaços em branco ( \S ) seguidos por tom ou TOM e novamente 0 ou mais caracteres não brancos ) com uma string vazia.
Provavelmente você também deve remover espaços duplos:

sed 's/\S*\(tom\|TOM\)\S*//g;s/\(\s\)\s*//g'
    
por 18.07.2011 / 11:00