정수, 소수, 부동 소수점 정규식
5367 단어 ShellScriptgrep정규식
개요
쉘을 사용해 수치 데이터 파일의 정형을 실시하고 있을 때, 정규 표현으로 막혔으므로 메모 대신에.
정수(1,2,3,...)와 소수(1.1,2.5,...)와 부동 소수점수(1.0E+10, 1.6e-19, ...)가 섞인 파일로부터 수치를 빼내는 정규 표현.
정규식
다음과 같은 정규 표현식으로 추출 할 수 있습니다.[+-]?[0-9]+[\.]?[0-9]*[eE]?[+-]?[0-9]*
실제로는 이것을 grep
나름대로.
2016/8/30 추가
@히코자루_3씨보다, 위의 정규 표현이라고 egrep
나 1+1
와 같은 케이스도 매치해 버린다는 지적이 있었습니다.
다음 정규 표현식이 바람직합니다.5-2
또한 이와 함께 테스트용 스크립트를 수정했기 때문에 지금까지 기재하고 있던 섹션 아래에 수정 후의 것을 추기합니다.
2017/6/22 추가
@scivola씨로부터, [+-]?[0-9]+[.]?[0-9]([eE][+-])?[0-9]
와 같은 「지수 돌아가기」도 매치해 버린다고 하는 지적이 있었습니다.
위의 것보다 아래의 것이 더 바람직할 것입니다.1e+
이 정규 표현식의 테스트 결과이지만, 현재 바쁜 경우 할애 (또는 나중에 다시 추가)하겠습니다 ...
2018/12/2 추가[+-]?[0-9]+(\.[0-9]*)?([eE][+-]?[0-9]+)?
와 같은 소수점 이하만으로 수치를 표현하고 있는 경우는.123
되는 것 같습니다.
@ 나베타 감사합니다! !
테스트 결과도 편집했습니다. 지금 다시 보면 조금 기분 나쁜 결과도 있네요.
예 (정규 표현식에 실수 있음)
테스트 용 스크립트. [+-]?([0-9]+(\.[0-9]*)?|\.[0-9]+)([eE][+-]?[0-9]+)?
의 egrep
선택적으로 조건과 일치하는 부분 만 출력합니다.
testscript#!/bin/bash
file=$1
for line in `cat ${file}`
do
echo ${line}
N=`echo ${line} | egrep -o '[+-]?[0-9]+[\.]?[0-9]*[eE]?[+-]?[0-9]*'`
echo "result = ${N}"
done
그래서 이것에 이런 느낌의 테스트 케이스를 던져
testcase1
58
-5
2.8
-3.39
73.098abh
1.0e+29
1.6E-16
abc39
num=395479.27
에서 실행 결과
결과>./numtest.sh testfile.txt
1
result = 1
58
result = 58
-5
result = -5
2.8
result = 2.8
-3.39
result = -3.39
73.098abh
result = 73.098
1.0e+29
result = 1.0e+29
1.6E-16
result = 1.6E-16
abc39
result = 39
num=395479.27
result = 395479.27
제대로 수치만 빼낼 수 있다고 생각해
예 (2018/12/2 수정 버전)
그래서 수정 한 쉘 스크립트입니다.
testscript#!/bin/bash
file=$1
for line in `cat ${file}`
do
echo ${line}
N=`echo ${line} | egrep -o '[+-]?([0-9]+(\.[0-9]*)?|\.[0-9]+)([eE][+-]?[0-9]+)?'`
for res in $N
do
echo "result = ${res}"
done
done
이와 함께 테스트 케이스도 늘렸습니다. 이번에는 한 줄에 여러 숫자가있는 경우에도 대응할 수 있도록하고 있습니다.
testcase1
58
-5
2.8
-3.39
73.098abh
1.0e+29
1.6E-16
abc39
num=395479.27
1+1
234gh290
432-84
235hk23.4e-6
1e+
3e-
.123
.23h5
hoge
이하, 결과.
결과1
result = 1
58
result = 58
-5
result = -5
2.8
result = 2.8
-3.39
result = -3.39
73.098abh
result = 73.098
1.0e+29
result = 1.0e+29
1.6E-16
result = 1.6E-16
abc39
result = 39
num=395479.27
result = 395479.27
1+1
result = 1
result = +1
234gh290
result = 234
result = 290
432-84
result = 432
result = -84
235hk23.4e-6
result = 235
result = 23.4e-6
1e+
result = 1
3e-
result = 3
.123
result = .123
.23h5
result = .23
result = 5
hoge
지금 다시 결과를 확인하면, -o
같은 경우에서 .23h5
와 .23
. .
Reference
이 문제에 관하여(정수, 소수, 부동 소수점 정규식), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/hitsumabushi845/items/1b1a4921d515f662b416
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
다음과 같은 정규 표현식으로 추출 할 수 있습니다.
[+-]?[0-9]+[\.]?[0-9]*[eE]?[+-]?[0-9]*
실제로는 이것을 grep
나름대로.2016/8/30 추가
@히코자루_3씨보다, 위의 정규 표현이라고
egrep
나 1+1
와 같은 케이스도 매치해 버린다는 지적이 있었습니다.다음 정규 표현식이 바람직합니다.
5-2
또한 이와 함께 테스트용 스크립트를 수정했기 때문에 지금까지 기재하고 있던 섹션 아래에 수정 후의 것을 추기합니다.
2017/6/22 추가
@scivola씨로부터,
[+-]?[0-9]+[.]?[0-9]([eE][+-])?[0-9]
와 같은 「지수 돌아가기」도 매치해 버린다고 하는 지적이 있었습니다.위의 것보다 아래의 것이 더 바람직할 것입니다.
1e+
이 정규 표현식의 테스트 결과이지만, 현재 바쁜 경우 할애 (또는 나중에 다시 추가)하겠습니다 ...
2018/12/2 추가
[+-]?[0-9]+(\.[0-9]*)?([eE][+-]?[0-9]+)?
와 같은 소수점 이하만으로 수치를 표현하고 있는 경우는.123
되는 것 같습니다.@ 나베타 감사합니다! !
테스트 결과도 편집했습니다. 지금 다시 보면 조금 기분 나쁜 결과도 있네요.
예 (정규 표현식에 실수 있음)
테스트 용 스크립트.
[+-]?([0-9]+(\.[0-9]*)?|\.[0-9]+)([eE][+-]?[0-9]+)?
의 egrep
선택적으로 조건과 일치하는 부분 만 출력합니다.testscript
#!/bin/bash
file=$1
for line in `cat ${file}`
do
echo ${line}
N=`echo ${line} | egrep -o '[+-]?[0-9]+[\.]?[0-9]*[eE]?[+-]?[0-9]*'`
echo "result = ${N}"
done
그래서 이것에 이런 느낌의 테스트 케이스를 던져
testcase
1
58
-5
2.8
-3.39
73.098abh
1.0e+29
1.6E-16
abc39
num=395479.27
에서 실행 결과
결과
>./numtest.sh testfile.txt
1
result = 1
58
result = 58
-5
result = -5
2.8
result = 2.8
-3.39
result = -3.39
73.098abh
result = 73.098
1.0e+29
result = 1.0e+29
1.6E-16
result = 1.6E-16
abc39
result = 39
num=395479.27
result = 395479.27
제대로 수치만 빼낼 수 있다고 생각해
예 (2018/12/2 수정 버전)
그래서 수정 한 쉘 스크립트입니다.
testscript
#!/bin/bash
file=$1
for line in `cat ${file}`
do
echo ${line}
N=`echo ${line} | egrep -o '[+-]?([0-9]+(\.[0-9]*)?|\.[0-9]+)([eE][+-]?[0-9]+)?'`
for res in $N
do
echo "result = ${res}"
done
done
이와 함께 테스트 케이스도 늘렸습니다. 이번에는 한 줄에 여러 숫자가있는 경우에도 대응할 수 있도록하고 있습니다.
testcase
1
58
-5
2.8
-3.39
73.098abh
1.0e+29
1.6E-16
abc39
num=395479.27
1+1
234gh290
432-84
235hk23.4e-6
1e+
3e-
.123
.23h5
hoge
이하, 결과.
결과
1
result = 1
58
result = 58
-5
result = -5
2.8
result = 2.8
-3.39
result = -3.39
73.098abh
result = 73.098
1.0e+29
result = 1.0e+29
1.6E-16
result = 1.6E-16
abc39
result = 39
num=395479.27
result = 395479.27
1+1
result = 1
result = +1
234gh290
result = 234
result = 290
432-84
result = 432
result = -84
235hk23.4e-6
result = 235
result = 23.4e-6
1e+
result = 1
3e-
result = 3
.123
result = .123
.23h5
result = .23
result = 5
hoge
지금 다시 결과를 확인하면,
-o
같은 경우에서 .23h5
와 .23
. .
Reference
이 문제에 관하여(정수, 소수, 부동 소수점 정규식), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/hitsumabushi845/items/1b1a4921d515f662b416텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)