나는 10년 넘게 프로그래밍을 하지 않았습니다. 텍스트 파일이 있는데 업로드 및 다운로드 속도에 대한 Mpbs 값을 읽으려고 합니다.
Server: Iomart - Maidenhead (id = 3839)
ISP: Plusnet
Latency: 8.59 ms (0.10 ms jitter)
Download: 71.43 Mbps (data used: 52.8 MB)
Upload: 18.39 Mbps (data used: 16.9 MB)
Packet Loss: 0.0%
저는 정규식 도구를 사용하여 정규식을 테스트하고 구축해 왔으며, 이는 제가 원하는 결과를 제공합니다.
regex2="Upload:\W+([0-9]+\.[0-9]+)"
regex3="Download:\W+([0-9]+\.[0-9]+)"
while read line; do
if [[ $line =~ regex2 ]]
then
echo "match ${BASH_REMATCH[1]}"
UPS=${BASH_REMATCH[1]}
fi
if [[ $line =~ regex3 ]]
then
echo "match ${BASH_REMATCH[1]}"
DNS=${BASH_REMATCH[1]}
fi
done < Result.txt
내가 원하는 것을 달성할 수 있는 더 좋은 방법이 있을 것이라고 확신하지만 내가 겪고 있는 주요 문제는 정규식이 작동하지 않는다는 것입니다.
답변1
코드에 세 가지 문제가 있습니다.
- 생각대로 정규식을 사용하고 있지 않습니다 (
$
및 누락regex2
)regex3
. bash
Perl과 같은 정규 표현식은\W
"단어 문자가 아님"을 의미하는 것으로 이해되지 않습니다.- 변수가 호출되었음에도 불구하고 행을 읽지 않습니다
line
.
이 문제를 해결하려면:
$
테스트에서 합계 값을 얻으려면 on을 사용하십시오 .regex2
regex3
if [[ $line =~ $regex2 ]]; then ...; fi
표현식
[^[:alnum:]_]
대신 POSIX 정규 표현식을 사용 하거나 탭이나 공백을 일치시키세요.\W
[[:blank:]]
사용
while IFS= read -r line; do ...; done
('"IFS=read-r-line" 이해").