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 -ropción. En FreeBSD u OSX , pase la -Eopción.
Si su sed no tiene alternancia, puede llamar en su awklugar. 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