다음 스키마 파일이 포함된 디렉터리가 있습니다.
SNAFU12.jpg
SNAFU1.jpg
SNAFU123.jpg
이 코드를 사용해 보았지만 출력이 생성되지 않았습니다.
for f in *.jpg; do
regex="/\d/g"
file="f:5:6"
if [[ $file =~ $regex ]]; then
echo ${BASH_REMATCH[1]}
fi
done
내 예상 결과는 다음과 같습니다.
12
1
23
답변1
/
*nix의 디렉터리 구분 기호인 두 개의 s를 일치시키려고 하는데 이를 포함하는 파일 이름이 없기 때문에 정규식 패턴이 어떤 것과도 일치하지 않습니다 . 나는 /.../g
그것이 당신의 JavaScript(또는 다른) 정규식 연습에서 나온 것이라고 가정합니다. 그렇지 않습니까?
하다:
for i in *.jpg; do [[ $i =~ ([0-9]+)\.jpg$ ]] && echo "${BASH_REMATCH[1]}"; done
bash
정규식은 \d
문자 클래스 키워드를 지원하지 않습니다 [0-9]
. 따라서 를 사용하는 것이 더 좋습니다 [0-9]
. 에 의존하려면 locale
문자 클래스를 사용하십시오 [:digit:]
.
for i in *.jpg; do [[ $i =~ ([[:digit:]]+)\.jpg$ ]] && echo "${BASH_REMATCH[1]}"; done
예:
$ for i in *.jpg; do [[ $i =~ ([0-9]+)\.jpg$ ]] && echo "${BASH_REMATCH[1]}"; done
123
12
1
답변2
ls
파일이 포함된 폴더의 출력을 수정합니다 .
ls SNAFU* | sed -e 's/SNAFU\|.jpg//g'