2008-10-01 8 views

Respuesta

46
sed 's/a.*b/xyz/g;' old_file > new_file 

GNU sed (lo que es probable que tenga) es aún más versátil:

sed -r --in-place 's/a(.*)b/x\1y/g;' your_file 

Aquí se presenta una breve explicación de estas opciones:

-i [SUFIJO], - en el lugar [= SUFIJO] editar archivos en su lugar (si hace copia de seguridad de extensión proporcionada)

-r, --regexp extendido uso de expresiones regulares extendidas en el guión.

La versión FreeBSD también es compatible con estas opciones. Las versiones NetBSD y OpenBSD solo son compatibles con -r.

Si desea obtener más información sobre sed, Cori ha sugerido this tutorial.

+0

No sabía sobre el -r cambiar para permitir la expresión regular extendida - ¡práctico! Además, -i es un atajo para --in-place. –

+0

Y use el enlace de Cori arriba si desea obtener más información. sed es más liviano que perl afaik – MattSmith

+0

Eso es un gran comienzo ... ¡Y gracias por el enlace del tutorial! – Swanand

26

Perl fue inventado para esto:

perl -pi -e 's/foo/bar/g;' *.txt 

Cualquier s normales /// patrón en esas comillas simples. Usted puede mantener una copia de seguridad con algo como esto:

perl -pi.bak -e 's/foo/bar/g;' *.txt 

o de la tubería:

cat file.txt | perl -ne 's/foo/bar/g;' | less 

Pero ese es el trabajo realmente más de sed.

5

sed, el editor de flujo, y sí, se utiliza la expresión regular.

6

Considere Rubí como una alternativa a Perl. Se robó la mayoría de los argumentos de línea de comando de Perl (-i, -p, -l, -e, -n) y auto-establece $_ para usted como Perl y tiene mucha bondad regex. Además, la sintaxis de Ruby puede ser más cómoda y fácil de leer o escribir que la de Perl o Sed. (O no, dependiendo de sus gustos.)

ruby -pi.bak -e '$_.gsub!(/foo|bar/){|x| x.upcase}' *.txt

vs

perl -pi.bak -e 's/(foo|bar)/\U\1/g' *.txt

En muchos casos, cuando se trata de una sola línea, el rendimiento no es suficiente de un problema para el cuidado ya sea que uses peso ligero sed o peso pesado Perl o peso heaveier Ruby. Use lo que sea más fácil de escribir.

+1

¡Gracias por el útil ejemplo! Creo que podría simplificarse (ligeramente) por: 'ruby -pi.bak -e 'gsub (/ foo | bar /) {| x | x.upcase} '* .txt' (por ejemplo, eliminando '$ _'). –

Cuestiones relacionadas