Script Bash: imprime todas las líneas entre dos patrones en variables con barras

Script Bash: imprime todas las líneas entre dos patrones en variables con barras

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 bashno se sustituyan las variables, por lo que en su ejemplo, sedbusque $fileAy $fileBliteralmente, 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'

información relacionada