Así que soy bastante bueno con expresiones regulares, pero estoy teniendo algunos problemas con ellos en Unix. Aquí hay dos cosas que me gustaría saber cómo hacerlo:grep en unix/linux: cómo reemplazar o capturar texto?
1) substituyen todo el texto excepto letras, números y guión bajo
En PHP que me gustaría hacer esto: (funciona muy bien)
preg_replace('#[^a-zA-Z0-9_]#','',$text).
In bash Probé esto (con éxito limitado); Parece que dosis no permite utilizar el conjunto completo de expresiones regulares:
text="my #1 example!" ${text/[^a-zA-Z0-9_]/'')
he probado con sed, pero todavía parece tener problemas con el conjunto de expresiones regulares completo:
echo "my #1 example!" | sed s/[^a-zA-Z0-9\_]//
Estoy seguro hay una manera de hacerlo con grep, también, pero estaba rompiendo en varias líneas cuando he intentado:
echo abc\!\@\#\$\%\^\&\*\(222 | grep -Eos '[a-zA-Z0-9\_]+'
Y finalmente también trató de usar expr pero parecía que tenían realmente soporte limitado para la expresión regular extendida ... partes
2) Captura (múltiple) de texto
En PHP tan sólo pudiera hacer algo como esto:
preg_match('#(word1).*(word2)#',$text,$matches);
No estoy seguro de cómo sería posible en * nix ...
Ver también: 'perl' – derobert