2012-02-12 14 views
0

会社のJMTの名前(および名前のみ)を1つの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」であり、そうであれば、第一及び第二の単語を印刷するかどうかをチェックします。正規表現は必要ありません(この場合)。

+0

これは、会社名が1つの単語または3つ以上の単語でない限り美しく機能します。 –

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拡張機能を使用していますが、ここではこれらの先読み演算子がありますnice linkとそれに関する情報があります)。

+0

それは完全に動作しますが、名前の前にある番号を取り除くにはどうすればいいですか? – user1204954

+1

この条件をregexpに追加してください: '' [^ 0-9] *(?= JMT) "' –

+0

このcatコマンドはどのように機能しますか?入力するだけです $> cat my url | Grepは入力ストリームを受け取り、処理します( 'echo" ab "| grep -o" a "はaを返します)。grep --perl-regexp --only-matching"。*(?= JMT) ? – user1204954

1

ちょうどマッチ(のような--only-matching)印刷をgrepする-oフラグを使用して、Perlの正規表現のために-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は、後続/先頭のスペースが含まれていないことを確認してください)。