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

関連情報