Tengo un temparchivo con algunos contenidos en minúsculas y mayúsculas.
Entrada
Contenido de mi temparchivo:
hi
Jigar
GANDHI
jiga
Quiero convertir todo de arriba a abajo .
Mando
Intenté el siguiente comando:
sed -e "s/[A-Z]/[a-z]/g" temp
pero obtuvo un resultado incorrecto.
Salida
Lo quiero como:
hi
jigar
gandhi
jiga
¿Para qué debe estar la parte sustituta del argumento sed?

Respuestas:
Si su entrada solo contiene caracteres ASCII, puede usar
trcomo:o (menos fácil de recordar y escribir IMO; pero no se limita a las letras latinas ASCII, aunque en algunas implementaciones que incluyen GNU
tr, todavía se limita a caracteres de un solo byte, por lo que en las configuraciones regionales UTF-8, todavía se limita a letras ASCII):si tienes que usar
sed:(aquí asumiendo la implementación de GNU).
Con POSIX
sed, necesitará especificar todas las transliteraciones y luego puede elegir qué letras desea convertir:Con
awk:fuente
\Les una extensión GNU.\LFunciona bien para mí hasta ahora. Para aclarar el punto que está tratando de hacer la extensión GNUsedEs un comando de Unix. Los diferentes sistemas tienen diferentes variantes con diferentes comportamientos y funcionalidades. Afortunadamente, hoy en día, hay un estándar que se ajusta a la mayoría para que pueda contar con un conjunto mínimo de características comunes a todos.\Lno está entre ellos y fue introducido por GNUsed(coincide con el mismo operador en estándarex/vi) y generalmente no está disponible en otras implementaciones.trimplementaciones como GNUtrno funcionan correctamente en entornos locales de varios bytes (la mayoría de ellas lo son hoy en día,echo STÉPHANE | tr '[:upper:]' '[:lower:]'por ejemplo). En los sistemas GNU, puede preferir lasedvariante oawk'stolower().sed 's/.*/\L&/g' < input. La\1referencia a la subcadena coincidente no funcionará a menos que especifique la subcadena con paréntesis como lo hace wurtle en la suya. Sin embargo, es un poco más limpio de usar¶ representar todo el partido, como se muestraUsando vim, es súper simple:
Abre el archivo,
ggva a la primera línea0, primera columna. ConguG, reduce el caso de todos los caracteres hasta el final del archivo.ZZsalva y sale.Debería manejar casi cualquier cosa que le arrojes; Ignorará los números, manejará no ASCII.
Si desea hacer lo contrario, convierta las letras minúsculas en mayúsculas, cambie la
usalida porU:gg0gUGZZy listo.fuente
vim file1 file2 fileetcy luego algo así:bufdo gg0guG:w<CR>sería probablemente funcionará para cualquier número de archivos. Sin embargo, no he probado eso!Me gusta
ddpara esto, yo mismo.... consigue ...
El
LC_ALL=Cobjetivo es proteger cualquier multibytes en la entrada, aunque no se convertirán las mayúsculas multibyte. Lo mismo es cierto para (GNU)tr: ambas aplicaciones son propensas a la manipulación de entradas en cualquier configuración regional que no sea C.iconvse puede combinar con cualquiera de ellos para obtener una solución integral.El
2>/dev/nullredireccionamiento descartaddel informe de estado predeterminado del servidor y su stderr. Sin esto,ddse completaría un trabajo como el anterior con información de impresión, como cuántos bytes se procesaron, etc.fuente
trcuando se manejan archivos grandes, ¡gracias!También puedes usar Perl 5:
La opción
-ple dice a Perl que ejecute la expresión especificada una vez para cada línea de entrada, imprimiendo el resultado, es decir, el valor final de$_.-eindica que el programa será el siguiente argumento, a diferencia de un archivo que contiene el script.lcConvierte a minúsculas. Sin una discusión, seguirá funcionando$_. Y lo$_=guarda de nuevo para que se imprima.Una variación de eso sería
El uso
-nes como,-pexcepto que al$_final no se imprimirá. Entonces, en lugar de guardar en esa variable, incluyo una declaración de impresión explícita.Un beneficio de Perl en contraste con sed es que no necesita ninguna extensión GNU. Hay proyectos que tienen que ser compatibles con entornos que no sean GNU pero que también tienen dependencia de Perl. En comparación con esto
tr, podría ser que Perllcpueda ser más fácil de reconocer en la localidad. Vea laperllocalepágina del manual para más detalles.fuente
Debe capturar el patrón coincidente y luego usarlo en el reemplazo con un modificador:
Las
\(...\)"capturas" del texto coincidente adjunto, la primera captura va\1, la siguiente\2, etc. La numeración se corresponde con los corchetes de apertura en caso de capturas anidadas.El
\Lconvierte el patrón capturado a minúsculas, hay también\Upara el caso superior.fuente
&Además de la respuesta de MvG, también podría usar Perl 6:
perl6 -pe .=lc tempAquí $ _ está implícito, y no necesita las comillas simples para protegerlo de la expansión del shell ($ _ es un parámetro Bash especial; consulte: https://www.gnu.org/software/bash/manual/ html_node / Special-Parameters.html )
fuente