sed one-liner pour tout supprimer entre une paire de supports?

15

Je travaille avec du texte plein de choses entre crochets [] que je ne veux pas. Étant donné que je peux supprimer les crochets moi-même, je n'ai pas besoin de la doublure pour le faire pour moi, mais j'ai besoin d'une doublure qui supprimera tout entre eux.

Qu'en est-il des parenthèses () au lieu des parenthèses?

ixtmixilix
la source

Réponses:

20

Remplacez [some text]par la chaîne vide. En supposant que vous ne voulez pas analyser les crochets imbriqués, le some textne peut pas contenir de crochets.

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

Notez que dans l'expression du crochet [^][]pour correspondre à tout sauf à [ou ], le ]doit venir en premier. Normalement, a ]mettrait fin au jeu de caractères, mais s'il s'agit du premier caractère du jeu (ici, après le ^caractère de complémentation), le ]représente lui-même.

Si vous souhaitez analyser les crochets imbriqués ou si le texte entre crochets peut s'étendre sur plusieurs lignes, sed n'est pas le bon outil.

Gilles 'SO- arrête d'être méchant'
la source
merci, @Gilles ... btw, il peut s'étendre sur plusieurs lignes, mais j'utilise un script Perl pour joindre les lignes ...
ixtmixilix
@ixtmixilix: Si vous avez un script Perl, vous pouvez également lui faire supprimer le texte entre crochets. En Perl, vous pouvez écrire s/\[[^\[\]]*\]//g(c'est-à-dire utiliser des barres obliques inverses pour échapper aux membres du jeu de caractères).
Gilles 'SO- arrête d'être méchant'
@Gilles pourriez-vous en dire plus sur [^] [] exactement plz. merci
Arash
1
@arashams […]= jeu de caractères. ^comme premier caractère signifie compléter l'ensemble. ]serait normalement marquer la fin de l'ensemble, mais s'il s'agit du premier caractère autre que ^, c'est un caractère ordinaire - un ensemble vide ou le complément de l'ensemble vide n'est pas autorisé. Ensuite [est ordinaire et se ]termine l'ensemble.
Gilles 'SO- arrête d'être méchant'
@Gilles tnx pour votre aide mais je ne l' obtenir :( quelle dose moyenne que « ^ comme le premier moyen de caractères pour compléter l'ensemble » je veux dire que fait - il par exemple est - il adapté à tout le contenu??
Arash
9

La commande sed -e 's/([^()]*)//g'fera des parenthèses au lieu des crochets.

ixtmixilix
la source