
次のようなディレクトリがあります:
/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
次のような変数の 2 つの値の間にあるすべてのファイルを一覧表示するスクリプトを作成したいと思います。
#!/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'