正規表現を使用して、ファイル パスから 2 つのドットを単純化するにはどうすればよいでしょうか (パスは実際には存在しない可能性があります)。
たとえば、またはに変更/my/path/to/.././my/./../../file.txt
します。/my/file.txt
path/./to/../../../file.txt
../file.txt
bash の 1 つのコマンドでこれを行うことは可能ですか? (sed
たとえば、複雑な python や perl スクリプトを使用しない)
編集:この質問に遭遇しましたがrealpath
、使用しているコンピューターでは利用できません。
edit : FJのソリューションから、より一般的なケースで機能する次の正規表現を構築することになりました (パスの一部のフォルダーの名前が の場合は機能しません....
)。
sed -e 's|/\./|/|g' -e ':a' -e 's|\.\./\.\./|../..../|g' -e 's|^[^/]*/\.\.\/||' -e 't a' -e 's|/[^/]*/\.\.\/|/|' -e 't a' -e 's|\.\.\.\./|../|g' -e 't a'