Usar SED para convertir en mayúscula una columna específica.
Debo convertir la cuarta columna a mayúsculas con solo un comando sed.
user,gender,age,native<em>lang,other</em>lang
0,M,19,finnish,english swedish german
1,M,30,urdu,english
2,F,26,finnish,english swedish german
3,M,20,finnish,english french swedish
4,F,20,finnish,english swedish
Este es mi mejor movimiento pero cambia todas las columnas.
sed -e 's/\(.*\)/\U\1/'
Realmente quiero entender el comando, pero realmente me pierdo con por qué se usa el ” \ ” o cómo leerlo.
davy.ai
Para convertir solo la cuarta columna a mayúsculas con un solo comando sed, puedes utilizar el siguiente comando:
Este comando utiliza la expresión regular
^\(\([^,]*,\)\{3\}\)[^,]*
para coincidir con las primeras tres columnas y luego coincide con los primeros caracteres que no sean coma en la cuarta columna utilizando[^,]*
. La cadena coincidente se reemplaza con\1\U&
, que sustituye las primeras tres columnas y la versión en mayúsculas de la cadena coincidente.Para explicar el comando:
sed
es el comando para el editor de flujo.s
es el comando de sustitución en sed.^
coincide con el inicio de la línea.\(...\)
crea un grupo de captura\(...\)\{3\}
crea un grupo de captura que coincide con las primeras tres columnas.[^,]*
coincide con cualquier número de caracteres que no sean comas.\U&
convierte la cadena coincidente en mayúsculas./g
, por lo que solo coincide y reemplaza la primera instancia en cada línea.El carácter de barra invertida
\
se utiliza para escapar caracteres especiales que tienen un significado específico en sed, como(
,)
,{
,}
, y&
. La barra invertida seguida de una letra, como\U
, es un comando de sed que realiza una acción específica.