eliminar cierto carácter/caracteres de archivos de forma recursiva en ubuntu

eliminar cierto carácter/caracteres de archivos de forma recursiva en ubuntu

Tengo 8000 archivos impares y necesito limpiarlos. Actualmente estoy usando este comando sed para reemplazar ciertos caracteres con los que quiero:

find . -name "*.txt" -print | xargs sed -i 's/a/z/g'

Esto cambia recursivamente todas las a en todos los archivos a z. Mi pregunta es:

  1. ¿Puedo indicar varios caracteres para que coincidan en el comando que se cambiará a z?
  2. ¿Puedo eliminar el carácter coincidente en lugar de cambiarlo a z?

Gracias de antemano.

Respuesta1

¿Puedo indicar varios caracteres para que coincidan en el comando que se cambiará a z?

Sí tu puedes. Para ello, encerre varios caracteres entre corchetes:

sed -i 's/[abc]/z/g' file.txt

Esto reemplazará a todosa,b, yCpersonajes conz.
No reemplazaráa B Cconz, lo reemplazará conzzz.

¿Puedo eliminar el carácter coincidente en lugar de cambiarlo a z?

Esto es muy fácil, simplemente lo reemplazas por nada:

sed -i 's/[abc]//g' file.txt

Esto borrará todoa,b, yCcaracteres.

Nota: Estos ejemplos funcionan en su caso con find& xargstambién.

Respuesta2

A ambas se les puede responder que sí:

1: Puedes hacerlo usando la llamada clase de carácter [abcde], por ejemplo

echo abcabcabc | sed -e 's/[abc]/z/g'

que reemplaza los tres a,b,c por z.

2: Si sustituye una cadena vacía, básicamente eliminará todos los caracteres coincidentes, por ejemplo

echo abcabcabc | sed -e 's/[ac]//g'

solo recuperas las b.

información relacionada