반응형
일반 bash에서 regexp를 사용하여 부분 문자열 추출
bash를 사용하여 문자열에서 시간을 추출하려고하는데 그것을 알아내는 데 어려움을 겪고 있습니다.
내 문자열은 다음과 같습니다.
US/Central - 10:26 PM (CST)
그리고 10:26부분 을 추출하고 싶습니다 .
sed, awk 등을 사용하지 않고 bash로만이 작업을 수행하는 방법을 아는 사람이 있습니까?
마찬가지로 PHP에서 나는 최선의 방법은 아니지만 작동합니다.
preg_match( ""(\d{2}\:\d{2}) PM \(CST\)"", "US/Central - 10:26 PM (CST)", $matches );
답변에 sed 또는 awk를 사용하더라도 도움을 주셔서 감사합니다.
순수 bash 사용 :
$ cat file.txt
US/Central - 10:26 PM (CST)
$ while read a b time x; do [[ $b == - ]] && echo $time; done < file.txt
bash 정규식을 사용한 또 다른 솔루션 :
$ [[ "US/Central - 10:26 PM (CST)" =~ -[[:space:]]*([0-9]{2}:[0-9]{2}) ]] &&
echo ${BASH_REMATCH[1]}
grep고급 정규식을 사용 하고 둘러 보는 또 다른 솔루션 :
$ echo "US/Central - 10:26 PM (CST)" | grep -oP "\-\s+\K\d{2}:\d{2}"
sed를 사용하는 또 다른 솔루션 :
$ echo "US/Central - 10:26 PM (CST)" |
sed 's/.*\- *\([0-9]\{2\}:[0-9]\{2\}\).*/\1/'
perl을 사용하는 또 다른 솔루션 :
$ echo "US/Central - 10:26 PM (CST)" |
perl -lne 'print $& if /\-\s+\K\d{2}:\d{2}/'
마지막으로 awk 사용 :
$ echo "US/Central - 10:26 PM (CST)" |
awk '{for (i=0; i<=NF; i++){if ($i == "-"){print $(i+1);exit}}}'
echo "US/Central - 10:26 PM (CST)" | sed -n "s/^.*-\s*\(\S*\).*$/\1/p"
-n suppress printing
s substitute
^.* anything at the beginning
- up until the dash
\s* any space characters (any whitespace character)
\( start capture group
\S* any non-space characters
\) end capture group
.*$ anything at the end
\1 substitute 1st capture group for everything on line
p print it
빠르고 더럽고 정규식이 없으며 견고성이 낮은 찹찹 기술
string="US/Central - 10:26 PM (CST)"
etime="${string% [AP]M*}"
etime="${etime#* - }"
당신의 문자열이
foo="US/Central - 10:26 PM (CST)"
그때
echo "${foo}" | cut -d ' ' -f3
일을 할 것입니다.
참고 URL : https://stackoverflow.com/questions/13373249/extract-substring-using-regexp-in-plain-bash
반응형
'programing tip' 카테고리의 다른 글
| Java는 Currying을 지원합니까? (0) | 2020.09.13 |
|---|---|
| Swift의 button.addTarget 액션에 매개 변수 첨부 (0) | 2020.09.13 |
| AWS Lambda 오류 :“ '/ var / task / index'모듈을 찾을 수 없습니다.” (0) | 2020.09.13 |
| 다른 cmd.exe 프롬프트 내에서 새 cmd.exe 창을 만듭니다. (0) | 2020.09.13 |
| RequirementsApi 대 TargetApi 안드로이드 주석 (0) | 2020.09.12 |