sedまたはawkパターン間の文字列の置き換え(絶対パスを相対パスに変換)

sedまたはawkパターン間の文字列の置き換え(絶対パスを相対パスに変換)

結局のところ、絶対パスを相対パスに置き換えるより大きなスクリプトの一部として、パス内のすべてのフォルダを「..」に置き換えようとします。

予想される出力は次のようになります。

/ABCDdasda234sEA/asdas2das/asdasf34234/ => /../../../
/ABCDdasda234sEA/asdas2das/asdasf34234/124551assdfa/ => /../../../../

さまざまな正規表現を試しましたが、最後の "/"は何度も一致せず、文字列の終わりと見なされるため、一致を正しく取得できませんでした。

[root@test]# sed "s/^\/.*\/$/\/..\//g" <<< "/ABCDdasda234sEA/asdasdas/asdasf34234/"

/../

ベストアンサー1

1).*次のスラッシュを含むすべてを食べるので[^/]*(スラッシュを除くすべての文字を使用してください)

2)すべてのバージョンで利用できない問題\+(「1回以上発生」)を避けるために、sed少なくとも1つの文字が必要な点を追加してください。[^/]他の人がいないと信じるなら、ここに他の人は必要ありません//

s_3)美化のため:パターンや代替項目にスラッシュが含まれている場合、またはコマンドに別の区切り文字を使用すると読みやすくなります。#

すべてを一度に:

sed 's_/.[^/]*_/.._g'

おすすめ記事