Bash 脚本:用斜杠打印变量中两个模式之间的所有行

Bash 脚本:用斜杠打印变量中两个模式之间的所有行

我有一个如下所示的目录:

/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

我想编写一个脚本来列出变量中两个值之间的所有文件,如下所示:

#!/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'

输出为:

/path/to/files/data-file.2
/path/to/files/data-file.3
/path/to/files/data-file.4
/path/to/files/data-file.5

但是,sed 命令似乎不起作用。我猜是因为变量中的斜杠。有没有办法在不更改变量的情况下解决这个问题?我想在 fileA 和 fileB 是动态的脚本中使用这段代码。

答案1

如果在第一次出现时对其进行转义,则可以使用不同的分隔符,这样斜线就不会混淆sed。但是,请注意,使用单引号将导致bash不替换变量,因此在您的示例中,sed查找$fileA$fileB字面意思,因为变量不会扩展。如果使用变量,则需要使用双引号。

因此,这样的事情应该可行:

#!/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'

相关内容