2012-02-12 116 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确保不包括尾随/前导空格)。