Existen muchas variaciones en la sintaxis de expresiones regulares . Las primeras herramientas en el mundo de Unix que tenían expresiones regulares no tenían las capacidades completas de las expresiones regulares, solo conjuntos de caracteres ( […]
y .
), repetición ( *
) y anclas de línea ( ^
y $
). Las expresiones regulares básicas solo tienen estos operadores. Sed es una herramienta de la vieja escuela y utiliza expresiones regulares básicas.
Muchas implementaciones sed tienen extensiones para la coincidencia completa de expresiones regulares. Debido a que el personaje se |
representa a sí mismo, debe usarlo \|
para alternar, y de manera similar \(
y \)
para agrupar. Tenga en cuenta que el estándar POSIX no exige que \|
sea compatible con las expresiones regulares básicas , y algunos sistemas (por ejemplo, OpenBSD ) no lo tienen.
Algunas versiones de sed tienen una opción para cambiar a expresiones regulares extendidas , donde (…)
se usa para agrupar y |
alternar. Con GNU sed (es decir, bajo Linux o Cygwin) o Busybox , pasa la -r
opción. En FreeBSD u OSX , pase la -E
opción.
Si su sed no tiene alternancia, puede llamar en su awk
lugar. POSIX lo exige , pero es un poco detallado para esta tarea, y no admite referencias posteriores.
awk '{gsub(/foo|bar/, "narf")}' <fileName.old >fileName.new
Por cierto, solo GNU y Busybox sed admiten el reemplazo de archivos en su lugar. Awk y otras versiones de sed no. Consulte ¿Puedo hacer que 'cortar' cambie un archivo en su lugar?
Si tiene Perl, a menudo es útil en una forma de herramienta única para todo tipo de procesamiento de texto. La mayoría de lo que es fácil en sed, awk y el resto no es mucho más difícil en Perl, y puedes aprender una sola herramienta (si es compleja).
perl -i -pe 's/foo|bar/narf/g' fileName
Gilles 'SO- deja de ser malvado'
fuente