정규식 및 grep이 작동하지 않습니다.

정규식 및 grep이 작동하지 않습니다.

다음과 같은 정규식이 있습니다.

([:digit:]{4})-([:digit:]{1,2})-([:digit:]{1,2})

날짜는 다음 형식으로 가져와야 합니다.

2010-12-19

그리고 저는 이것을 다음과 같은 파일 이름에 사용하고 있습니다:

2010-12-19-xxx-xxx-xxx.markdown

그리고 다음과 같이 사용할 때 grep:

echo $POST | grep -oE "([:digit:]{4})-([:digit:]{1,2})-([:digit:]{1,2})" # $POST is the filename

효과가 없어 공허함만 느껴집니다.

답변1

이 시도:-

echo $POST | grep -oE "[0-9]{4}-[0-9]{1,2}-[0-9]{1,2}"

여기에서 시도해 보면 다음과 같은 결과를 얻습니다.

[andys@daedalus ~]$ echo "2010-12-19-aaa-bbb-ccc-ddd.markdown" | grep -oE "[0-9]{4}-[0-9]{1,2}-[0-9]{1,2}"
2010-12-19

그것이 당신이 찾고 있는 것이기를 바랍니다.

답변2

Andy의 대답은 괜찮지만 원래 구문에 더 가까운 것을 원한다면 다음을 시도해 볼 수 있습니다.

echo $POST | egrep -oE "([[:digit:]]{4})-([[:digit:]]{1,2})-([[:digit:]]{1,2})"

확장 정규식에는 egrep이 필요하고 문자 클래스에는 이중 괄호가 필요합니다.

답변3

괄호는 필요하지 않지만 대괄호가 더 필요합니다. 캐릭터 클래스는 개별 캐릭터와 동일한 특성을 갖습니다. 다음과 같은 모음 [aeiou]이나 다음과 같은 숫자: [0123456789]또는 this: 를 검색할 수 있는 것처럼 또는 대괄호 표현식 (16진수) 과 [0-9]같은 클래스도 묶어야 합니다 .[:digit:][:upper:][[:xdigit:]]

grep -oE "[[:digit:]]{4}-[[:digit:]]{1,2}-[[:digit:]]{1,2}"

관련 정보