쉘 명령을 사용하여 디렉토리에서 하위 문자열 부분을 얻는 방법

쉘 명령을 사용하여 디렉토리에서 하위 문자열 부분을 얻는 방법

쉘 명령을 사용하여 다음 디렉토리 경로에서 마지막 2개 부분만 추출해야 합니다.

"안드로이드/2.1/패키지/테스트/디버그/"

예상 출력: /test/debug

이 경로는 "Android/2/Pipeline/Packages/test/debug/"와 같은 다른 경로 값으로 변경되는 동적 경로입니다.

경로 값의 나머지 부분이 계속 변경되어도 마지막 2개 부분을 추출할 수 있는 특정 정규식을 찾을 수 없습니다. 즉, '/test/debug'만 가져옵니다.

누구든지 이것에 대해 도움을 줄 수 있다면 감사하겠습니다.

감사해요

답변1

접근 방식이 많이 있다고 생각합니다. 시도해 볼 수 있습니다(pwd를 사용 사례에 적합한 것으로 교체).

echo /$(basename $(dirname $(pwd)))/$(basename $(pwd))

또는

pwd | awk -F/ '{print "/" $(NF-1) "/" $(NF)}'

그리고 아마도 셀 수 없이 많은 다른 방법들도 있을 것입니다. . .

답변2

쉘은 변수 수정자 %, 및 를 %%사용 하여 이를 간접적으로 수행할 수 있습니다 . 이는 주어진 패턴에 대한 후행 또는 선행 일치를 제거합니다. 패턴은 쉘이라는 점에 유의하세요.###글로브, 정규 표현식이 아닙니다.

다음 예에서는 선택적 후행이 있거나 없는 마지막 두 경로 요소를 인쇄합니다./

$ in="Android/2/Pipeline/Packages/test/debug/"
$ echo $( t=${in%/} && t=${t%/*/*} && echo ${in##$t} )
/test/debug/

관련 정보