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

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
Posted
Filed under 프로그램과 명령어/커맨드 라인 트릭
참조 원문 : Quick Shell Tip: Remove grep command while grepping something using ps command

  ps 명령어의 결과를 grep을 사용해 필터링하면 명령어를 실행한 쉘 프로세스가 자신의 grep 명령어로 인해 같이 검색되서 나옵니다. 아래 결과의 첫 번째 줄처럼 말이죠.
mirashi@myservlab:~$ ps aux | grep cron
root      1190  0.0  0.0   2092   876 ?        Ss   Nov10   0:04 cron
mirashi   2681  0.0  0.0   3048   792 pts/0    S+   10:31   0:00 grep cron
  이걸 방지하는 첫 번째 방법은 평범하게 필터링 결과에서 'grep'이 들어간 줄을 다시 제외시키는 겁니다.
mirashi@myservlab:~$ ps aux | grep cron | grep -v grep
root      1190  0.0  0.0   2092   876 ?        Ss   Nov10   0:04 cron
  그 다음 방법은 좀 특이한 방법인데 명령어와 실제 필터링 대상을 다르게 만드는 겁니다.
mirashi@myservlab:~$ ps aux | grep [c]ron
root      1190  0.0  0.0   2092   876 ?        Ss   Nov10   0:04 cron
  이게 뭔 의미냐면 정규식 자체로 볼 때 'cron'과 '[c]ron'에는 결과적으로 아무런 차이가 없지만 grep 명령어를 사용할 때 입력한 문자열 자체는 '[c]ron'이기 때문에 ps의 결과에서는 '[c]ron'로 출력됩니다. 하지만 이 명령어로 인해 검색하는 것은 '[c]ron'이라는 문자열이 아니라 'cron'이기 때문에 결과에 출력되지 않는 겁니다. 아무튼 세상엔 머리 좋은 사람이 많은 것 같습니다.

  이걸 더 쉽게 사용하는 방법은 자신의 홈 디렉토리에 있는 .bashrc 파일에 아래의 함수를 추가하고 사용하는 겁니다.
function pps(){ ps aux | grep "$@" | grep -v 'grep'; }
  위 함수를 추가하고 다시 로그인하거나 '. .bashrc'로 리로딩하면 간단하게 아래와 같이 사용할 수 있습니다.
mirashi@myservlab:~$ pps cron
root      1190  0.0  0.0   2092   876 ?        Ss   Nov10   0:04 cron


2010/12/02 11:11 2010/12/02 11:11