2012-02-12 113 views
0

我怎麼用一個Unix命令公司JMT的名稱(只有名稱)打印?斯堪的納維亞字母的問題?通過打字grep命令的問題

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

我還有公司名稱和+標記,我應該擺脫。

我會非常感謝你的幫助bacause我是新來這個。

[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

認爲只要漂亮,因爲有隻有一個字,或三個或更多的話沒有公司名稱的工作。 – 2012-02-12 17:57:03

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,其中從我們得到的前瞻操作的正則表達式的擴展(有一個不錯的link有關於它的一些信息)。

+0

它完美的作品,但我該如何擺脫名稱前面的數字? – user1204954 2012-02-12 11:32:06

+1

加入該條件的正則表達式:「 」[^ 0-9] *(= JMT?)「' – 2012-02-12 11:34:55

+0

如何做到這一點的貓命令?我可以只輸入 $> cat我的網址| grep的--perl-regexp的--only匹配」(AB 「| grep的-o 」一個「'返回一個*(= JMT?) – user1204954 2012-02-12 11:48:15

1

嘗試使用-o標誌到grep打印只是比賽(如--only-matching),並在-P標誌Perl的正則表達式餵養:

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

給出:

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

這不承擔「JMT」是公司名稱中的最後一個詞。如果不是最後添加一個以下[^\d+]\b\b確保不包括尾隨/前導空格)。