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

관련 정보