функция 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")./"

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

Связанный контент