cut+sed 函數加入

cut+sed 函數加入

輸入

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")./"

與。dirnamexargs

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./

相關內容