Вход
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./