2012-10-31 4 views
-2

나는 다른 라인 파일, 그 중 나는 등문자열 패턴 및 정규식

다음 몇 가지 다음

173.194.034.006.00080-138.096.201.072.49934 

패턴이 3 개 개의 숫자이며, 점 같은 선 다음 3 개 개의 숫자와 점을 가지고있다

이 목적으로 awk, grep 또는 sed를 사용하고 싶습니다. 이 정규 표현식을 어떻게 표현합니까? 당신이 존재하는 한 시리즈 123 등으로 라인을 얻으려면 가정

+6

정확히 수행해야 할 사항은 무엇입니까? –

답변

1

, 당신은 123.345 추천 시리즈를 원한다면

grep '[0-9][0-9][0-9]\.' file > numbersFile 

을한다. 다음 수행 등

grep '[0-9][0-9][0-9]\.[0-9][0-9][0-9]\.' file > numbersFile 

[0-9]은 0-9 사이 (0,1,2,3,4,5,6,7,8,9)의 문자 중 하나만 일치한다는 것을 의미합니다.

'.' char는 일반적인 grep 정규 표현식에서 특별한 의미가 있습니다. \.처럼 "just match the '."와 같이 이스케이프 처리해야합니다. grep에 대한 멋진 확장으로 패턴을 한 번 지정할 수 있으며 {3} 또는 때로는 \{3\}과 같은 한정자를 포함 할 수 있습니다 (3 회 반복 함). 그러나이 확장은 이식 가능하지 않습니다. 솔라리스, AIX, 그리고 다른 사람과 같은 이전의 유닉스.

여기에 시스템이 한정자를 지원하는지 확인하는 간단한 테스트입니다. (슈퍼 그렙 - 머리 :-) 내 용어를 수정하실 수 있습니다.

echo "173.194.034.006.00080-138.096.201.072.49934" | grep '[0-9]\{10\}\.' 
    echo "173.194.034.006.00080-138.096.201.072.49934" | grep '[0-9]\{2\}\.' 

첫 번째 테스트가 실패해야하며, grep이 한정자를 지원하는 경우 두 번째 테스트가 성공합니다.

장황한 해결책을 배우기 위해 상처를주지는 않습니다 (위와 같음). 그러면 어떤 grep에서도 작동 할 것입니다.

IHTH.

+0

\ {3 \}에 대해 더 알고 싶습니다. '[0-9] \ {3 \} \와 같아야합니다.'? – user1769686

+0

수정 사항을 참조하십시오. 행운을 빕니다. – shellter

+0

Ed Morton의 posix char 클래스는'[0-9] \ {3 \} \ 대신'\ {3 \}'를 지원하는 sed에서 작동해야합니다.'[[: digit :]] \{삼\}\.' 모두에게 행운을 빕니다. – shellter

1

AWK에서 나는 아마 문자열을 구축 할 것 다음으로 검색 :

BEGIN { 
    p = "[.]" 
    d = "[[:digit:]]" 
    d3 = d d d      # or d"{3}" 
    d5 = d d d d d     # or d"{5}" 
    re = d3 p d3 p d3 p d3 p d5 # or "(" d3 p "){4}" d5 
} 
$0 ~ re "-" re 

하지만 정말 모두가 당신이 그것으로 수행 할 작업을 따라 달라집니다.

0

IP 주소 다음에 포트 번호, 대시, IP 주소/포트 번호 조합이 차례로 표시됩니다.

당신이 트릭을 할 것 다음

grep -P '(\d{3}\.){4}\d{5}-(\d{3}\.){4}\d{5})' 

현대 UNIX/Linux 시스템에 있다면 -을 할 수있는 대부분의 휴대용 방법이되지 않을 수도있다. 이것은 "펄 정규 표현식 사용"옵션에 '-P'옵션을 사용합니다. 일부 사람들은 속임수로 간주 할 수도 있습니다!

줄에이 문자열 앞이나 뒤에 여분의 텍스트가 있는지 말하지 않았습니다. 그런 다음 '-o'옵션을 사용하면 일치하는 텍스트를 추출하고 다른 모든 것은 무시할 수 있습니다.