
Tengo un directorio que se parece a esto:
/path/to/files/data-file.1
/path/to/files/data-file.2
/path/to/files/data-file.3
/path/to/files/data-file.4
/path/to/files/data-file.5
/path/to/files/data-file.6
Me gustaría crear un script para enumerar todos los archivos entre dos valores en variables como la siguiente:
#!/bin/bash
fileA="/path/to/files/data-file.2"
fileB="/path/to/files/data-file.5"
ls -v /path/to/files/*-file.[0-9]* | sed -n '/$fileA/,/$fileB/p'
con la salida:
/path/to/files/data-file.2
/path/to/files/data-file.3
/path/to/files/data-file.4
/path/to/files/data-file.5
Sin embargo, el comando sed no parece funcionar. Supongo que por las barras en las variables. ¿Hay alguna manera de superar esto sin cambiar las variables? Me gustaría usar este fragmento de código en un script donde el archivo A y el archivo B son dinámicos.
Respuesta1
Puede utilizar un delimitador diferente si lo escapa en su primera aparición, para que las barras no confundan sed
. Sin embargo, tenga en cuenta que el uso de comillas simples dará como resultado que bash
no se sustituyan las variables, por lo que en su ejemplo, sed
busque $fileA
y $fileB
literalmente, ya que las variables no se expanden. Debe utilizar comillas dobles si utiliza variables.
Entonces, algo como esto debería funcionar:
#!/bin/bash
fileA="/path/to/files/data-file.2"
fileB="/path/to/files/data-file.5"
ls -v /path/to/files/*-file.[0-9]* | sed -n "\@$fileA@,\@$fileB@p'