파일 이름에서 특정 문자열을 검색하여 쉘 스크립트의 변수에 저장합니다.

파일 이름에서 특정 문자열을 검색하여 쉘 스크립트의 변수에 저장합니다.

매우 구체적인 명명 체계를 가진 파일이 있다고 가정해 보겠습니다. 예를 들어, 이라는 파일이 있고 x=1,y=15,z=63.txt이 파일 이름을 변수에 저장했습니다 file. 변수에서 문자열을 검색 "x="한 다음 그 뒤의 숫자를 변수에 저장하고 싶습니다 x. y및 에도 마찬가지입니다 z.

x="search x=*, $file"
y="search y=*, $file"
z="search z=*.txt $file"

쉘 스크립팅을 처음 접하는 사람으로서 이는 명백히 가짜 명령이고 컴파일되지 않지만 이것이 내 목표의 개요를 설명해주기를 바랍니다. 내가하고 싶은 일에 대한 해결책이 있습니까?

답변1

참고: 대답은 bash셸에 적용되며 파일 이름에 공백과 같은 특수 문자가 없다고 가정합니다.

변수 에 파일 이름이 포함되어 있다고 가정하면 $file먼저 파일의 접미사를 제거해야 합니다.

$ file=${file%.*}
$ echo $file
x=1,y=15,z=63

지금 $file은 그게 전부입니다 x=1,y=15,z=63.

declare이제 내장된 기능을 사용할 수 있습니다 bash:

declare ${file//,/ }

${file//,/ }모든 쉼표 문자를 공백으로 바꾸므로 bash는 이를 다음과 같이 확장합니다.

declare x=1 y=15 z=63

결과 :

$ declare ${file//,/ }
$ echo $x $y $z
1 15 63

답변2

정규식과 sed를 사용하여 숫자를 추출할 수 있습니다.


$ echo x=1,y=15,z=63  | sed 's/.*x=\([0-9]\+\).*/\1/g'
1
$ echo x=1,y=15,z=63  | sed 's/.*y=\([0-9]\+\).*/\1/g'
15
$ echo x=1,y=15,z=63  | sed 's/.*z=\([0-9]\+\).*/\1/g'
63

답변3

값이 정수라고 가정하면 정규식 일치가 값을 추출하는 깔끔한 방법이 될 것입니다.

이것은:

file='x=1,y=15,z=63.txt'

if [[ $file =~ "x="([0-9]+)",y="([0-9]+)",z="([0-9]+) ]]; then
    x=${BASH_REMATCH[1]}
    y=${BASH_REMATCH[2]}
    z=${BASH_REMATCH[3]}
fi

declare -p x y z

산출

declare -- x="1"
declare -- y="15"
declare -- z="63"

관련 정보