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?
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: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: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 comandoh
copia la línea coincidente al espacio de retención (un búfer temporal) y el comandod
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 comandoG
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.