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