Estoy ejecutando este comando en un shell bash en Ubuntu 12.04.1 LTS. Estoy tratando de eliminar los caracteres [
y ]
de una sola vez, es decir, sin tener que hacer una tubería para sed por segunda vez.
Sé que los corchetes tienen un significado especial en una expresión regular, así que me estoy escapando de ellos al anteponer una barra invertida. ¡El resultado que esperaba era solo la cadena, 123
pero los corchetes permanecen y me encantaría saber por qué!
~$ echo '[123]' | sed 's/[\[\]]//'
[123]
str='[123]'; str1=${str/\[/}; str2=${str1/\]}; echo $str2
Respuestas:
Esto es fácil si sigue el manual cuidadosamente: todos los miembros dentro de una clase de personaje pierden un significado especial (con algunas excepciones). Y] pierde su significado especial si se coloca primero en la lista. Tratar:
Esto dice:
]
y[
//
,g
.Nuevamente,
]
debe ser el primero en la clase siempre que esté incluido.fuente
No estoy seguro de por qué eso no funciona, pero esto sí:
o esto:
También puede intentar un enfoque diferente y hacer coincidir la cadena dentro de los corchetes (suponiendo que la cadena se pueda combinar fácilmente y no se define por los corchetes):
Tengo los mismos problemas con su expresión regular original,
grep
así que sospecho que esto no es solo unased
cosa.Extrañamente, estos producen resultados diferentes, pero uno de ellos coincide con lo que quieres:
Aplicando esto a su original
sed
(y agregando el/g
modificador para que elimine ambos corchetes):fuente
tr
:echo '[123]' | tr -d '[]'
- evita las confusiones de expresiones regulares acerca de escapar.tr
solo podía traducir un carácter máximo a la vez, pero estaba equivocado. ¡Gracias!Para eliminar todo antes y después de los corchetes:
Si sus datos son así, siempre significa comenzar y terminar entre corchetes:
fuente
Si tiene una cadena más compleja como 'abcdef [123] ghijk', también puede usar el comando bash interno 'cut' para extraer texto solo entre corchetes:
fuente
Puede escapar del soporte de apertura usando
\[
. Para el soporte de cierre, use[]]
.fuente