1. ホーム
  2. shell

[解決済み] Unixでパスの一部を削除する

2023-06-11 22:02:12

質問

文字列の中のパスの一部を削除しようとしています。私はパスを持っています。

/path/to/file/drive/file/path/

最初の部分を削除したい /path/to/file/drive を削除して出力してください。

file/path/

注意:whileループの中に複数のパスがあり、その中で同じ /path/to/file/drive がありますが、目的の文字列を削除するための「方法」を探しているだけです。

いくつかの例を見つけましたが、動作させることができません。

echo /path/to/file/drive/file/path/ | sed 's:/path/to/file/drive:\2:'
echo /path/to/file/drive/file/path/ | sed 's:/path/to/file/drive:2'

\2 は文字列の2番目の部分であり、私は明らかに何か間違ったことをしている...多分、より簡単な方法がありますか?

どのように解決するのですか?

POSIXシェルの変数展開を使って行うこともできます。

path=/path/to/file/drive/file/path/
echo ${path#/path/to/file/drive/}

#.. の部分は、変数が展開されたときに先頭のマッチする文字列を取り除きます。 これは、文字列がすでにシェル変数にある場合に特に便利です。 for ループを使用している場合など、文字列がすでにシェル変数にある場合に特に便利です。 また、変数の末尾からマッチする文字列 (例えば拡張子) を取り除くこともできます。 %... . を参照してください。 bash のマニュアルページを参照してください。