我得到了一條下降 n 層深度的相對路徑,並希望產生上升相同層數的“反向”路徑。我想產生相同數量的級別,有或沒有尾隨空格。例如:
dir/subdir/subsubdir should produce ../../..
dir/subdir/subsubdir/ should produce ../../../
為什麼加號運算子找不到匹配項?這不是意味著一個或多個非斜線字元嗎?
$ echo dir/subdir/subsubdir | sed 's|[^/]+|..|g'
dir/subdir/subsubdir
而單一字元匹配後跟星號匹配則有效:
$ echo dir/subdir/subsubdir | sed 's|[^/][^/]*|..|g'
../../..
即使尾部有斜線:
$ echo dir/subdir/subsubdir/ | sed 's|[^/][^/]*|..|g'
../../../
FWIW,星號 (*) 將代替加號 (+):
$ echo dir/subdir/subsubdir | sed 's|[^/]*|..|g'
../../..
但後面的斜杠不起作用,因為它增加了另一個等級:
$ echo dir/subdir/subsubdir/ | sed 's|[^/]*|..|g'
../../../../..
答案1
不幸的是,正規表示式語法有很多種,每種都有自己的輕微(或有時不那麼輕微)的變化。假設您使用的是 GNU sed,以下任一選項皆可使用:
$ echo dir/subdir/subsubdir | sed 's|[^/]\+|..|g'
../../..
$ echo dir/subdir/subsubdir | sed -r 's|[^/]+|..|g'
../../..
一般來說,您需要檢查您正在使用的任何工具的手冊頁,以了解它使用的風格。