es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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.

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para convertir solo la cuarta columna a mayúsculas con un solo comando sed, puedes utilizar el siguiente comando:

    sed 's/^\(\([^,]*,\)\{3\}\)[^,]*/\1\U&/' 
    

    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.
    • El comando no utiliza la bandera global /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.

Comments are closed.