¿Qué herramienta de línea de comandos de GNU / Linux utilizaría para realizar una búsqueda y reemplazar un archivo?

StackOverflow https://stackoverflow.com/questions/155934

  •  03-07-2019
  •  | 
  •  

Pregunta

¿Qué herramienta de línea de comandos de GNU / Linux utilizaría para realizar una búsqueda y reemplazar un archivo?

¿Se puede especificar el texto de búsqueda y el reemplazo en un formato de expresiones regulares?

¿Fue útil?

Solución

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

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

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

Aquí hay una breve explicación de esas opciones:

  

-i [SUFFIX], --in-place [= SUFFIX]                   editar archivos en su lugar (hace una copia de seguridad si se proporciona la extensión)

     

-r, --regexp-extended                   use expresiones regulares extendidas en el script.

La versión FreeBSD también admite estas opciones. El NetBSD y OpenBSD las versiones solo admiten -r .

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

Otros consejos

Perl fue inventado para esto:

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

Cualquier patrón normal /// en esas comillas simples. Puedes mantener una copia de seguridad con algo como esto:

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

O tubería:

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

Pero ese es realmente el trabajo de sed.

Considere a Ruby como una alternativa a Perl. Robó la mayoría de los argumentos de línea de comandos de Perl ( -i , -p , -l , -e , -n ) y se configura automáticamente $ _ para que usted, al igual que Perl, tenga mucha bondad de expresiones regulares. Además, la sintaxis de Ruby puede ser más cómoda y fácil de leer o escribir que la de Perl o la de sed. (O no, dependiendo de tus 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 one-liners, el rendimiento no es lo suficientemente importante como para preocuparse de si usa Perl de peso ligero o pesado o Perl o Ruby más pesado. Usa lo que sea más fácil de escribir.

sed , el editor de secuencias, y sí, usa expresiones regulares.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top