작동하는 명령줄 표현은 다음과 같습니다.
program --files path_to_mydir/mydata_[0-9].csv
나는 떠나고 싶었지만 [0-100]
그것은 효과가 없었습니다.
program --files path_to_mydir/mydata_[0-100].csv
[0-10]
또한 또 다른 질문이 있습니다. wrt 쉘 스크립트와 bash 스크립트를 무엇이라고 부르나요 ?
감사해요
편집: 비슷하지만 이 질문은 묻지 않았습니다.ls
답변1
[...]
대괄호 표현식입니다 . 항상 단일 문자와 일치하므로 [0-100]
단일 0
또는 1
(POSIX 로캘에서) 만 일치하므로 사용할 수 없습니다.
zsh
셸 에서는 <0-100>
숫자 범위 글로빙 패턴을 사용할 수 있지만 다음 상황에서는 작동하지 않습니다 bash
.
program --files path_to_mydir/mydata_<0-100>.csv
bash
너 보다할 수 있다대신 중괄호 확장을 사용하세요.
program --files path_to_mydir/mydata_{0..100}.csv
그러나 이 패턴과 파일 이름 글로빙 패턴의 차이점을 알고 있어야 합니다. 위의 확장과 마찬가지로 중괄호 확장은문자열 생성, 사용 가능한 파일 이름과 파일 이름 와일드카드 패턴에 관계없이기존 이름과 일치. 이는 중괄호 확장이 존재하지 않는 프로그램 파일 이름을 제공할 수 있음을 의미합니다.
너할 수 있다0에서 100 사이의 숫자가 있는 파일을 일치시키는 데 사용되지만 [...]
각 숫자 길이에 하나씩 세 가지 모드로 설정해야 합니다.
shopt -s nullglob
program --files \
path_to_mydir/mydata_[0-9].csv \
path_to_mydir/mydata_[1-9][0-9].csv \
path_to_mydir/mydata_[1][0][0].csv
첫 번째는 0
에 숫자가 포함된 이름과 일치하고, 두 번째는 에 포함된 이름과 일치하며 9
, 마지막은 에 포함된 이름과 일치합니다.10
99
100
0으로 채워진 정수를 일치시키시겠습니까?
shopt -s nullglob
program --files \
path_to_mydir/mydata_[0][0-9][0-9].csv \
path_to_mydir/mydata_[1][0][0].csv
nullglob
어떤 이름과도 일치하지 않는 패턴이 제거되고 확장되지 않은 채로 남아 있지 않도록 이 코드의 두 변형 모두에 셸 옵션을 설정했습니다 .
사용자 fra-san은 위의 중괄호 확장을 쉘이 와일드카드 패턴 일치를 트리거하도록 강제하는 것과 결합할 수 있다고 언급했습니다.
shopt -s nullglob
program --files path_to_mydir/[m]ydata_{0..100}.csv
[m]
m
문자열에 (패턴 일치 문자 )를 포함하면 쉘은 중괄호 확장으로 생성된 각 문자열을 별도의 와일드카드 패턴으로 처리하게 됩니다. 를 사용하고 있으므로 nullglob
기존 이름과 일치하지 않는 패턴은 매개변수 목록에서 제거됩니다.
이는 101개의 globbing 패턴을 생성하고 확장하는 반면, globbing을 사용하는 이 답변의 다른 방법은 2개 또는 3개의 패턴을 사용합니다.
답변2
유사한 정규식 연산자와 마찬가지로 glob [...]
연산자는 지정된 문자 집합(또는 조합 요소)과 일치합니다.
한 문자만 일치합니다. 안에 [...]
당신은 가질 수 있습니다
[abc]
일치a
또는b
또는와 같은 단일 문자c
[[:digit:]]
일치 에 대해isdigit()
true를 반환하는 문자 와 같은 문자 클래스입니다 .- 범위는
[a-f]
및 사이에 정렬된 문자(또는 정렬 요소)와 같습니다(예를 들어 범위 내에 속하는 것 이상을 포함할 수 있으며 종종 포함합니다).a
f
abcdef
é
[[=e=]]
동등 클래스,[[.x.]]
이름으로 지정된 데이터 정렬 요소 와 같은 좀 더 난해한 것 ...
이 모든 것을 결합할 수 있습니다. 예를 들어 [[:blank:][:digit:]a-f123]
공백, 숫자, a와 f 사이의 문자, 1, 2, 3을 일치시키는 사람은 누구입니까?
일치 하는 문자는 [0-100]
0과 1, 0 또는 0 사이로 정렬되므로 다음 중 하나입니다.01٠۰߀०০੦૦୦௦౦౸೦൦෦๐໐༠༳၀႐០៰᠐᥆᧐᪀᪐᭐᮰᱀᱐⁰₀↉⓪⓿〇㍘꘠꣐꤀꧐꧰꩐꯰0