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

関連情報