매우 구체적인 명명 체계를 가진 파일이 있다고 가정해 보겠습니다. 예를 들어, 이라는 파일이 있고 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"