검색 엔진의 방문이 늘어나고 있군...

Posted
Filed under 프로그램과 명령어/커맨드 라인 트릭
참조 원문 : Groping through big data with grep

1. 숫자 4개로 시작하는 줄 뽑아내기
grep ^[0-9][0-9][0-9][0-9] textfile
grep -E "^[0-9]{4}" textfile
  하지만 이 조건만으로는 4자리로 시작하기만 하면 무조건 걸려나옵니다. } 문자 뒤에 공백을 하나 넣어서 처리할 수 있지만 좀 더   좋은 방법은 "단어 단위" 기능(<와 >)을 사용하는 것입니다.
$ grep '\<[0-9]\{4\}\>' textfile
2010
2013 is turning out to be a better year
  다만 이 방법을 사용할 때 주의할 점이 있습니다. 아래를 보시죠.
$ grep '\<[0-9]\{3,5\}\>' textfile
2010
2013 is turning out to be a better year
12345 Taylor Avenue
127.0.0.1
  다른 건 괜찮았는데 마지막에 IP 주소가 걸려 나왔습니다. 숫자 뒤에 문자가 나오는 경우도 "단어의 끝"으로 취급하기 때문입니다. 단어 단위로 걸러낼 때는 이런 사항도 고려해야 합니다.

2. IP 주소 뽑아내기
  IP 주소를 검출하는 게 은근히 생각보다 까다롭습니다. 먼저 특정 IP를 찾는 것부터 시작하겠습니다. 생각없이 그냥 지르면 이런 모습이 나옵니다.
$ grep 12.45.78.0 text
1234567890
12.45.78.0
  정규 표현식에서 점(.)은 하나의 문자를 뜻하니까요. 이럴 땐 -F 옵션(fixed string)을 사용하거나, fgrep 명령어를 사용하거나, 이스케이프 문자를 사용해야 합니다. 처음 두 방법은 사실상 같은 거나 다름없습니다.
$ grep -F 12.45.78.0 text
12.45.78.0
$ fgrep 12.45.78.0 text
12.45.78.0
$ grep "10\.20\.30\.40" textfile
Don't use the 10.20.30.40 address unless you first talk to Pete.
  이제 IPv4 주소 형식을 띈 문자열을 잡아내는 패턴의 예를 보겠습니다.
$ grep -w '[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}' textfile
127.0.0.1
Don't use the 10.20.30.40 address unless you first talk to Pete.
Refer to Section 11.2.3.4.20 for the process guidelines.
  마지막에 엉뚱한 게 나왔듯이 위의 방법도 완벽하진 않습니다만 여기서 더 발전시켰다간 필요 이상으로 복잡해지기 때문에 이 정도로 끝내는 게 적절할 것 같습니다.

2013/07/17 16:33 2013/07/17 16:33