쉘 스크립트에서 경로의 특정 부분을 추출하는 방법은 무엇입니까?

쉘 스크립트에서 경로의 특정 부분을 추출하는 방법은 무엇입니까?

path 변수가 있습니다 /usr/apps/app1/home/usera/run/10/_tmp/folder1/folder1. /usr/apps/app1/home/usera/run/10/_tmp쉘 스크립트에서 추출하는 방법은 무엇입니까 ?

답변1

쉘을 사용하다매개변수 확장:

dir=/usr/apps/app1/home/usera/run/10/_tmp/folder1/folder1
echo "${dir%/*/*}"

/usr/apps/app1/home/usera/run/10/_tmp

매개변수 확장확장 매개변수: $foo, $1. 이를 사용하여 문자열 또는 배열 작업을 수행할 수 있습니다 : "${file%.mp3}", "${0##*/}". "${files[@]: -4}"그들은해야언제나인용하십시오.

바라보다:http://mywiki.wooledge.org/BashFAQ/073그리고
LESS='+/Parameter Expansion' man bash
또한 참조http://wiki.bash-hackers.org/syntax/pe

답변2

zsh 셸에서 다음을 수행합니다.

dir=/usr/apps/app1/home/usera/run/10/_tmp/folder1/folder1
도착하다
newdir=/usr/apps/app1/home/usera/run/10/_tmp

끝에서 2개의 경로 구성요소를 제거하는 경우:

newdir=$dir:h:h

csh와 마찬가지로 경로의 h시작을 가져오기 위해 기록을 사용합니다.h:h수정자이는 매개변수 확장에 적용됩니다.

경로의 처음 9개 구성 요소를 가져오려면 다음을 수행하세요.

newdir=${dir:h9}

가장 왼쪽 항목에 모든 것을 추가하는 경우 /_tmp:

newdir=${(M)dir#*/_tmp}

가장 오른쪽에 있는 경우:

newdir=${(M)dir##*/_tmp}

${var#pattern}및 일치를 시작할 때 각각 ${var##pattern}가장 짧은 문자열과 가장 긴 문자열의 값으로 확장되는 Korn 쉘의 연산자입니다. 와 함께$varpatternM 매개변수 확장 플래그, 제거하는 대신 M부착된 부분까지 연장됩니다.


csh1은 zsh가 제공하는 것과 동일하게 동작하는 반면 csh는 dir=/usr/apps/app1/home/usera/run/10/_tmp/folder1/folder1/ksh와 마찬가지로 해당 후행 s를 추가 경로 구성 요소로 처리합니다.dir=/usr/apps/app1/home/usera/run/10/_tmp/folder1/folder1///${dir%/*/*}

답변3

사용 dirname:

dir=/usr/apps/app1/home/usera/run/10/_tmp/folder1/folder1
dirname -- "$(dirname -- "$dir")"

/usr/apps/app1/home/usera/run/10/_tmp

답변4

경로 변수에 줄 바꿈(\n)이 없다고 가정하면 sed를 사용하여 이 작업을 수행할 수 있습니다.

$ A=/usr/apps/app1/home/usera/run/10/_tmp/folder1/folder1
$ cutoff=/folder1/folder
$ echo "$A" | sed "s#$cutoff##"
/usr/apps/app1/home/usera/run/10/_tmp1

(문자열에 슬래시가 포함되어 있으므로 sed에서 다른 구분 기호를 사용해야 합니다. 컷오프 변수에 존재하지 않는 구분 기호를 선택하세요)

관련 정보