Grep命令问题

时间:2012-02-12 10:52:31

标签: linux unix grep

我应该如何使用一个Unix命令打印公司JMT的名称(以及仅名称)?斯堪的纳维亚字母的问题?输入

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

3 个答案:

答案 0 :(得分: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 :(得分: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扩展,其中我们已经有了那些超前运算符(有一个很好的link及其中的一些信息)。

答案 2 :(得分:1)

尝试使用-o标志来grep打印匹配项(例如--only-matching),并为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,请确保不包括尾随/前导空格。)