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 쉘의 연산자입니다. 와 함께$var
pattern
M
매개변수 확장 플래그, 제거하는 대신 M
부착된 부분까지 연장됩니다.
csh
1은 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에서 다른 구분 기호를 사용해야 합니다. 컷오프 변수에 존재하지 않는 구분 기호를 선택하세요)