2012-02-12 2 views
0

회사 JMT의 이름 (및 이름 만)을 하나의 Unix 명령으로 인쇄하려면 어떻게해야합니까? 스칸디나비아 문자 문제? 입력하여Grep 명령 문제

grep JMT url | egrep --only-matching '[^[:digit:]]+' 

나는 아직 제거해야합니다 회사 이름과 + 마크가 있습니다.

나는 이것에 대해 처음이기 때문에 당신의 도움에 매우 감사 할 것입니다.

[Name]      [Company] 

1. Matti Meikäläinen    TTK    36.9 
2. Teemu Aho      JMT    37.0 +0.1 
3. Kaarna Käyrä     JMT    37.1 +0.1 
4. Maija Meheväv     TTK    37.2 +0.1 
5. Giglio Matjusha    JMT    37.3 +0.1 

답변

2

사용 awk보다는 grep, 그것은 일치하는 선에서 텍스트 및 인쇄 기타 세부 사항을 검색하기가 훨씬 쉽다. 예를 들어

% echo '[Name] [Company] 

Matti Meikäläinen TTK 36.9 
Teemu Aho JMT 37.0 +0.1 
Kaarna Käyrä JMT 37.1 +0.1 
Maija Meheväv TTK 37.2 +0.1 
Giglio Matjusha JMT 37.3 +0.1' | awk '$3 == "JMT" { print $1, $2 }' 
Teemu Aho 
Kaarna Käyrä 
Giglio Matjusha 

이 제 "단어" "JMT"이고, 만약 그렇다면, 제 1 및 제 2 워드를 출력할지 여부를 검사한다. 정규식이 필요하지 않습니다 (이 경우).

+0

단 한 단어 또는 세 개 이상의 단어가있는 회사 이름이없는 한 훌륭하게 작동합니다. –

1

$> cat ./text 
[Name] [Company] 

Matti Meikäläinen TTK 36.9 
Teemu Aho JMT 37.0 +0.1 
Kaarna Käyrä JMT 37.1 +0.1 
Maija Meheväv TTK 37.2 +0.1 
Giglio Matjusha JMT 37.3 +0.1 

그래서의 해결책이 (이상한 문자를 억제하기위한) 파일로 출력을 상상하면 이름 앞에 숫자를 제거 싶어 경우

$> cat ./text | grep --perl-regexp --only-matching ".*(?=JMT)" 
Teemu Aho 
Kaarna Käyrä 
Giglio Matjusha 

:

$> cat ./text | grep --perl-regexp --only-matching "[^0-9]*(?=JMT)" 
Teemu Aho 
Kaarna Käyrä 
Giglio Matjusha 

우리가 여기서 사용하는 것은 perl의 regexp 확장입니다. 여기서 우리는 그 lookahead 연산자를가집니다. 좋은 그것에 관한 정보와 함께 link).

+0

완벽하게 작동하지만 이름 앞의 번호를 없애려면 어떻게해야합니까? – user1204954

+1

regexp에 해당 조건을 추가하십시오.''[^ 0-9] * (? = JMT) "' –

+0

이 cat 명령은 어떻게 작동합니까? 입력 할 수 있습니다. $> cat 내 url | grep --perl-regexp --only-matching ". * (? = JMT) ? – user1204954

1

단지 경기 (같은 --only-matching) 인쇄 grep으로하는 -o 플래그를 사용하고, 펄 정규식에 대한 -P 플래그에 먹이보십시오 :

grep -o -P '\b[^\d]+\bJMT\b' <your_file_name> 

이 제공 :

Teemu Aho JMT 
Kaarna Käyrä JMT 
Giglio Matjusha JMT 

이 가정 않습니다 "JMT"는 회사 이름의 마지막 단어입니다. 단지 다음을 추가하지 않으면 [^\d+]\b 끝 부분에 (\b은 후행/선행 공백이 포함되지 않도록하십시오).