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

相关内容