2012-02-12 2 views
0

Как я могу печатать с одной командой Unix имена (и только имена) компании JMT? Проблемы со скандинавскими буквами? НабравОшибка команды 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

Представьте свой вывод в файл (для подавления нечетных символов)

$> 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, откуда у нас есть этот оператор lookahead (есть хороший link с некоторой информацией об этом).

+0

Он отлично работает, но как я должен избавиться от числа перед именем? – user1204954

+1

Добавьте это условие в regexp: '" [^ 0-9] * (? = JMT) "' –

+0

Как работает эта команда? Могу ли я просто набрать $> cat my url | grep --perl-regexp - только совпадение ". * (? = JMT) ? – user1204954

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 убедитесь, что конечные/ведущие пробелы не включены).

Смежные вопросы