sed one-liner para excluir tudo entre um par de colchetes?

15

Estou trabalhando com um texto que está cheio de coisas entre colchetes [] que não quero. Como eu mesmo posso excluir os colchetes, não preciso de uma linha para fazer isso por mim, mas preciso de uma linha que remova tudo entre eles.

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

ixtmixilix
fonte

Respostas:

20

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

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

Observe que, na expressão entre colchetes, [^][]para corresponder a qualquer coisa, exceto [or ], o ]primeiro deve vir. Normalmente, a ]terminaria o conjunto de caracteres, mas, se for o primeiro caractere do conjunto (aqui, após o ^caractere de complementação), ele ]se manterá.

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

Gilles 'SO- parar de ser mau'
fonte
graças, @Gilles ... btw, ele pode abranger várias linhas, mas eu estou usando um script Perl para se juntar linhas ...
ixtmixilix
@ixtmixilix: Se você possui um script Perl, também pode remover o texto entre colchetes. No Perl, você pode escrever s/\[[^\[\]]*\]//g(ou seja, usar barras invertidas para escapar dos membros do conjunto de caracteres).
Gilles 'SO- stop be evil'
@Gilles, você poderia explicar mais sobre [^] [] exatamente plz. obrigado
Arash 17/05
1
@arashams […]= conjunto de caracteres. ^como o primeiro caractere significa complementar o conjunto. ]normalmente seria marcar o final do conjunto, mas se for o primeiro caractere ^, é um caractere comum - um conjunto vazio ou o complemento do conjunto vazio não é permitido. Então [é comum e ]termina o conjunto.
Gilles 'SO- stop be evil'
@Gilles tnx por sua ajuda, mas ainda não entendi :( que dose isso significa? "^ Como o primeiro caractere significa complementar o conjunto" quero dizer o que está fazendo? Por exemplo, ele corresponde a todo o conteúdo?
Arash
9

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

ixtmixilix
fonte