Aporte
dir/foo
Producción
dir./
así que necesito:
echo 'dir/foo' | MAGIC
P:Qué es MAGIC
? (algo así como un cut
+ sed
unido :D)
Respuesta1
Tienes algunas opciones aquí. Mi preferencia sería hacia una expansión de parámetros:
foo=dir/foo
echo "${foo%/*}./"
Otra opción es awk:
echo "dir/foo" | awk -F/ '{ print $1"./" }'
Respuesta2
Otro uso deread
IFS=/ read a b <<<"dir/foo"
echo "$a./"
No funcionará si "dir/foo" es en realidad "/home/user/foo"
Respuesta3
Puedes usar también dirname
conread
read foo
echo "$(dirname "$foo")./"
y dirname
con xargs
.
echo "$(xargs dirname)./"
Uso de ejemplo con una función:
$ MAGIC() { echo "$(xargs dirname)./"; }
$ echo 'dir/foo' | MAGIC
dir./
Respuesta4
No estoy seguro de lo que estás intentando hacer aquí. ¿Realmente quieres un literal .
? Esto se siente como unproblema xy.
De todos modos, una forma sencilla de hacer lo que parece estar pidiendo es utilizardirname
:
$ echo $(dirname "dir/foo")./
dir./
La principal ventaja dirname
es que puede manejar espacios y es parte de GNU coreutils, por lo que se instalará en todos los sistemas GNU. También puede tratar con caminos arbitrariamente largos:
$ echo $(dirname "aa/bb bb/cc/foo")./
aa/bb bb/cc./
Puedes usar el truco de @EvanTeitelman para convertir esto en una función:
$ MAGIC() { echo $(dirname "$1")./; }
$ MAGIC 'dir/foo'
dir./
$ MAGIC 'dir/foo bar/foo'
dir/foo bar./