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:
- ¿Puedo indicar varios caracteres para que coincidan en el comando que se cambiará a z?
- ¿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
& xargs
tambié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.