sed one-liner para eliminar todo entre un par de paréntesis?


15

Estoy trabajando con un texto que está lleno de cosas entre corchetes [] que no quiero. Como puedo eliminar los corchetes yo mismo, no necesito el one-liner para hacer eso por mí, pero sí necesito un one-liner que elimine todo entre ellos.

¿Qué pasa con paréntesis () en lugar de paréntesis?

Respuestas:


20

Reemplazar [some text]por la cadena vacía. Suponiendo que no desea analizar paréntesis anidados, some textno puede contener ningún paréntesis.

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

Tenga en cuenta que en la expresión de paréntesis [^][]para que coincida con cualquier cosa que no [sea ], ]primero debe aparecer. Normalmente ], a terminaría el conjunto de caracteres, pero si es el primer carácter del conjunto (aquí, después del ^carácter de complementación), el conjunto se ]destaca por sí mismo.

Si desea analizar corchetes anidados, o si el texto entre corchetes puede abarcar varias líneas, sed no es la herramienta adecuada.


gracias, @Gilles ... por cierto, que puede abarcar varias líneas, pero estoy usando un script en Perl para unir las líneas ...
ixtmixilix

@ixtmixilix: si tiene una secuencia de comandos Perl, también puede hacer que elimine el texto entre corchetes. En Perl, puede escribir s/\[[^\[\]]*\]//g(es decir, utilizar barras invertidas para escapar de los miembros del conjunto de caracteres).
Gilles 'SO- deja de ser malvado'

@Gilles, ¿podría explicar más sobre [^] [] exactamente por favor. gracias
Arash

1
@arashams […]= conjunto de caracteres. ^como el primer personaje significa complementar el conjunto. ]normalmente se marcaría el final del conjunto, pero si es el primer carácter que no sea ^, es un carácter ordinario: un conjunto vacío o el complemento del conjunto vacío no está permitido. Luego [es ordinario y ]termina el conjunto.
Gilles 'SO- deja de ser malvado'

@Gilles tnx por tu ayuda, pero aún así no lo entiendo :( ¿qué dosis significa eso? "^ Como el primer carácter significa complementar el conjunto" quiero decir, ¿qué está haciendo? Por ejemplo, ¿coincide con todo el contenido?
Arash

9

El comando sed -e 's/([^()]*)//g'hará paréntesis en lugar de corchetes.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.