Eingang
dir/foo
Ausgabe
dir./
Also, ich brauche:
echo 'dir/foo' | MAGIC
Q:Was ist MAGIC
? (so etwas wie ein cut
+ sed
verbunden :D)
Antwort1
Hier stehen Ihnen mehrere Optionen zur Verfügung. Ich würde eine Parametererweiterung bevorzugen:
foo=dir/foo
echo "${foo%/*}./"
Eine weitere Option ist awk:
echo "dir/foo" | awk -F/ '{ print $1"./" }'
Antwort2
Eine weitere Verwendung vonread
IFS=/ read a b <<<"dir/foo"
echo "$a./"
Funktioniert nicht, wenn „dir/foo“ eigentlich „/home/user/foo“ ist.
Antwort3
Sie können auch dirname
mit verwendenread
read foo
echo "$(dirname "$foo")./"
und dirname
mit xargs
.
echo "$(xargs dirname)./"
Beispielverwendung mit einer Funktion:
$ MAGIC() { echo "$(xargs dirname)./"; }
$ echo 'dir/foo' | MAGIC
dir./
Antwort4
Ich bin mir nicht sicher, was Sie hier versuchen. Wollen Sie wirklich ein wörtliches .
? Das fühlt sich an wie einXY-Problem.
Eine einfache Möglichkeit, das zu tun, wonach Sie anscheinend fragen, ist die Verwendung vondirname
:
$ echo $(dirname "dir/foo")./
dir./
Die Hauptvorteile von dirname
sind, dass es mit Leerzeichen umgehen kann und Teil der GNU-Coreutils ist, sodass es in allen GNU-Systemen installiert wird. Außerdem kann es mit beliebig langen Pfaden umgehen:
$ echo $(dirname "aa/bb bb/cc/foo")./
aa/bb bb/cc./
Sie können den Trick von @EvanTeitelman verwenden, um daraus eine Funktion zu machen:
$ MAGIC() { echo $(dirname "$1")./; }
$ MAGIC 'dir/foo'
dir./
$ MAGIC 'dir/foo bar/foo'
dir/foo bar./