sed one-liner per eliminare tutto tra una coppia di parentesi?


15

Sto lavorando con del testo pieno di roba tra parentesi [] che non voglio. Dal momento che posso eliminare le parentesi da solo, non ho bisogno del one-liner per farlo per me, ma ho bisogno di un one-liner che rimuoverà tutto tra loro.

Che dire delle parentesi () invece delle parentesi?

Risposte:


20

Sostituisci [some text]con una stringa vuota. Supponendo che non si desideri analizzare parentesi nidificate, some textnon può contenere parentesi quadre.

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

Si noti che nell'espressione parentesi [^][]per corrispondere a qualsiasi cosa tranne [o ], il ]primo deve venire. Normalmente a ]finirebbe il set di caratteri, ma se è il primo personaggio del set (qui, dopo il ^carattere di complementazione), ]sta per se stesso.

Se si desidera analizzare parentesi nidificate o se il testo tra parentesi può estendersi su più righe, sed non è lo strumento giusto.


grazie @Gilles ... tra l'altro, può estendersi su più righe, ma sto usando uno script Perl per unire le righe ...
ixtmixilix,

@ixtmixilix: se si dispone di uno script Perl, è possibile farlo rimuovere anche il testo tra parentesi. In Perl, puoi scrivere s/\[[^\[\]]*\]//g(cioè usare le barre rovesciate per sfuggire ai membri del set di caratteri).
Gilles 'SO- smetti di essere malvagio' il

@Gilles potresti spiegarmi di più su [^] [] esattamente per favore. grazie
Arash,

1
@arashams […]= set di caratteri. ^come primo personaggio significa integrare il set. ]sarebbe normalmente segnare la fine del set, ma se è il primo personaggio diverso da ^, è un personaggio normale - un set vuoto o il complemento del set vuoto non sono consentiti. Quindi [è ordinario e ]termina il set.
Gilles 'SO- smetti di essere malvagio'

@Gilles tnx per il tuo aiuto, ma ancora non lo capisco :( che dose significa? "^ Come il primo carattere intende integrare il set" intendo cosa sta facendo? Ad esempio è abbinato a tutti i contenuti?
Arash

9

Il comando sed -e 's/([^()]*)//g'farà parentesi anziché parentesi.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.