현재 디렉토리에서 키워드를 추출하는 Bash 스크립트

현재 디렉토리에서 키워드를 추출하는 Bash 스크립트

다음 형식의 디렉토리가 있습니다.

/folder1/folder2/name_X_Y_Z_A

여기서 X는 숫자, Y, ZA3개 또는 4개의 문자열입니다.

다음을 수행하기 위해 쉘 스크립트 파일을 작성하고 싶습니다.

  • 폴더 이름에서 X합계를 추출합니다.Z
  • 문자열 생성/folder1/folder2/name_(X-1)_Y_Z_A
  • string_Z.dat이 디렉터리에서 파일 복사

여기에서 특정 패턴을 추출하는 방법을 모르겠습니다 $PWD. 숫자 길이와 길이가 다를 수 있으므로 X및 의 문자 위치는 동일할 필요가 없습니다.Zname

답변1

먼저 셸의 매개변수 대체 구문을 사용하여 선행 경로 구성 요소를 잘라낸 ${PWD##*/}다음 밑줄을 필드 구분 기호로 사용하여 기본 이름을 배열로 읽을 수 있습니다.

IFS=_ read -a arr <<< "${PWD##*/}"

bash 배열은 인덱스가 0이므로 원하는 부분이 위치해야 합니다 ${arr[1]}.${arr[3]}

newdir="/folder1/folder2/name_$((${arr[1]}-1))_${arr[3]}_Z_A"

(X-1)[참고: 리터럴 문자열이 아니라 산술 결과를 의미한다고 가정합니다 . ]

답변2

X,Y,Z,A에 밑줄이 없다고 가정하면 매번 꼬리를 "잘라낼" 수 있습니다.

예를 들어

# DIR=$PWD
# example:
DIR=/folder1/folder2/name_100_YYYY_ZZZZ_AAAA

A=${DIR##*_} ; DIR=${DIR%_*}
Z=${DIR##*_} ; DIR=${DIR%_*}
Y=${DIR##*_} ; DIR=${DIR%_*}
X=${DIR##*_} ; DIR=${DIR%_*}

let X=X-1
DIR="${DIR}_${X}_${Y}_${Z}_${A}"

echo $DIR

이를 수행할 수 있는 또 다른 방법은 끝이 어디인지 알아내고 X나머지 부분을 한 번에 제거하는 것입니다.

# DIR=$PWD
# example:
DIR=/folder1/folder2/name_100_YYYY_ZZZZ_AAAA

DIRX=${DIR%_*_*_*}

YZA=${DIR#$DIRX}
X=${DIRX##*_} ; DIRX=${DIRX%_*}

let X=X-1
DIR="${DIRX}_${X}${YZA}"

echo $DIR

두 경우 모두 /folder1/folder2/name_99_YYYY_ZZZZ_AAAA결과를 얻습니다. 당신은 쉽게 cp파일을 넣을 수 있습니다.

답변3

Python을 사용할 수 있는 경우:

$ pwd=/folder1/folder1/name_10_ABCD_ABC_ABCD # or use $PWD
$ new=$(python -c "import os; x='"$pwd"'.rsplit('/', 1)[1].split('_'); x[1]=str(int(x[1])+1); print('_'.join(x))")
$ echo $new
name_11_ABCD_ABC_ABCD

관련 정보