반복되는 문자 축소

반복되는 문자 축소

echo "$PWD//" | sed -e 's#//\+#/#g'반복되는 슬래시를 단일 슬래시로 바꾸는 것보다 더 Bashist 방식이 있습니까?

감사해요스티븐 D, 이제 찾을 수 있는 완전히 작동하는 기능이 있습니다.두 개 이상의 경로 중 가장 긴 공통 경로:공개 경로.

답변1

"Bash 전용" 답변은 아니지만 유용할 수도 있습니다.

echo "$PWD///" | tr -s '/'

답변2

"pure bash"에서 사용할 수 있지만 extglob활성화된 경우에만 사용할 수 있습니다.

$ shopt -s extglob
$ A="////qsd/////sdfgfg//qsd//////"
$ echo ${A//\/+(\/)/\/}
/qsd/sdfgfg/qsd/

답변3

변수를 사용하여 Bash만 사용:

# code:
shopt -s extglob
A="$PWD//"; 
echo "Original: $A"; 
echo "Result:   ${A//+(\/)//}"

# output:
Original: /home/myhome/Projects/Bob/build//
Result:   /home/myhome/Projects/Bob/build/
  • // = 검색 및 바꾸기, 검색 및 바꾸기 계속

  • +(/) = 하나 이상의 "/"와 일치

  • // = "/"로 대체됨

더 나은 시각적 예를 위해 슬래시를 벗어나지 않고 이를 더 잘 보려면 ${VAR//pattern/string}으로 검색/대체하지 않도록 "z"를 눌러야 한다고 가정해 보겠습니다. 기본 구조는 난독화되어 있습니다. :

# code:
shopt -s extglob
A=zzz/zzz/zzzzz/zzzz/zzzz; 
echo $A; 
echo ${A//+(z)/z}

# output:
zzz/zzz/zzzzz/zzzz/zzzz
z/z/z/z/z

답변4

고쳐 쓰다:인주(+1) 올바른 아이디어를 얻었습니다...제 답변은 홀수 "/"에만 적용됩니다.

물론아니요설정하려면 "extglob"이 필요합니다.

var="$PWD///"; var="${var//\/\//}" 에코 "$var"

관련 정보