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.

Cómo agregar o colocar una cadena de ruta en un archivo de texto usando sed

Digamos que tengo un archivo de texto llamado files.txt.
Y en files.txt tengo una lista de rutas, por ejemplo:

/home/user/qwe
/home/user/asd
/home/user/zxc

Quiero poder mover una línea a otra, por ejemplo:

/home/user/asd
/home/user/qwe
/home/user/zxc

He intentado usar estos comandos para hacer eso. El primero funciona. Pero el segundo no funciona debido a la barra diagonal:

sed -i "2d" /home/user/files.txt
sed -i "/^'\/home\/user\/asd'/i '/home/user/qwe/'" /home/user/files.txt

He intentado usar una variable temporal con comillas simples para indicar una cadena literal, pero aún no funciona (en realidad, se debe usar con una variable). También he intentado usar un carácter arbitrario para reemplazar la barra diagonal porque en algunos casos sed no le presta atención, pero esta vez es diferente.
¿Cómo puedo lograr eso usando sed?

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para mover una línea de una posición a otra en un archivo de texto usando sed, puedes usar el siguiente comando:

    sed '2{h;d}; ${G}' files.txt
    

    Este comando moverá la segunda línea del archivo files.txt al final del archivo.

    Para mover una línea específica a una posición diferente, puedes modificar el comando según sea necesario. Por ejemplo, para mover /home/user/asd al principio del archivo y /home/user/qwe a la segunda línea, puedes usar el siguiente comando:

    sed -e '/home\/user\/asd/{h;d}' -e '/home\/user\/qwe/G' files.txt
    

    Este comando utiliza la función de coincidencia de patrones para encontrar las líneas que contienen /home/user/asd y /home/user/qwe. El comando h copia la línea coincidente al espacio de retención (un búfer temporal) y el comando d elimina la línea original del espacio de patrones (el búfer principal).

    Luego, cuando se cumple el segundo patrón (la línea que contiene /home/user/qwe), el comando G agrega el contenido del espacio de retención al final del espacio de patrones (que actualmente contiene solo la línea con /home/user/qwe), insertando así la línea /home/user/asd encima de ella.

    Ten en cuenta que las barras inclinadas hacia adelante en el patrón deben escaparse con una barra invertida y que todo el comando debe estar entre comillas simples para evitar su interpretación por parte del shell.

Comments are closed.