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