輸入
dir/foo
輸出
dir./
所以我需要:
echo 'dir/foo' | MAGIC
問:什麼是MAGIC
? (類似cut
+sed
加入:D)
答案1
您在這裡有幾個選擇。我的偏好是參數擴展:
foo=dir/foo
echo "${foo%/*}./"
另一個選擇是 awk:
echo "dir/foo" | awk -F/ '{ print $1"./" }'
答案2
另一種用途是read
IFS=/ read a b <<<"dir/foo"
echo "$a./"
如果“dir/foo”實際上是“/home/user/foo”,則不起作用
答案3
您也可以dirname
使用read
read foo
echo "$(dirname "$foo")./"
與。dirname
xargs
echo "$(xargs dirname)./"
函數的用法範例:
$ MAGIC() { echo "$(xargs dirname)./"; }
$ echo 'dir/foo' | MAGIC
dir./
答案4
我不確定你想在這裡做什麼。你真的想要一個字面意思嗎.
?這感覺就像一個XY問題。
不管怎樣,做你似乎要求的事情的一個簡單方法是使用dirname
:
$ echo $(dirname "dir/foo")./
dir./
它的主要優點dirname
是它可以處理空格,並且是 GNU coreutils 的一部分,因此將安裝在所有 GNU 系統中。它也可以處理任意長的路徑:
$ echo $(dirname "aa/bb bb/cc/foo")./
aa/bb bb/cc./
您可以使用 @EvanTeitelman 的技巧將其變成一個函數:
$ MAGIC() { echo $(dirname "$1")./; }
$ MAGIC 'dir/foo'
dir./
$ MAGIC 'dir/foo bar/foo'
dir/foo bar./