sed uma linha para apagar tudo entre parênteses?

14

Eu estou trabalhando com algum texto que está cheio de coisas entre colchetes [] que eu não quero. Como eu mesmo posso excluir os colchetes, eu não preciso do one-liner para fazer isso por mim, mas eu preciso de um one-liner que remova tudo entre eles.

E sobre parênteses () em vez de colchetes?

    
por ixtmixilix 11.06.2011 / 22:49

2 respostas

19

Substitua [some text] pela string vazia. Supondo que você não queira analisar parênteses aninhados, o some text não pode conter parênteses.

sed -e 's/\[[^][]*\]//g'

Observe que na expressão de colchete [^][] para corresponder a qualquer coisa, exceto [ ou ] , o ] deve vir primeiro. Normalmente, um ] terminaria o conjunto de caracteres, mas se for o primeiro caractere no conjunto (aqui, após o caractere de complementação ^ ), o ] significa ele mesmo.

Se você deseja analisar colchetes aninhados ou se o texto entre colchetes pode abranger várias linhas, sed não é a ferramenta certa.

    
por 11.06.2011 / 23:10
9

O comando sed -e 's/([^()]*)//g' fará parênteses em vez de colchetes.

    
por 14.06.2011 / 22:47