2009-07-02 8 views
0

Я хочу использовать grep, чтобы найти все заголовки в корпусе, я хочу найти все до: и игнорировать каждую вещь после этого. Кто-нибудь знает как это сделать? (Могу ли я получить полную строку кода)Grep Справка по использованию

+0

Не могли бы вы привести пример ввода и желаемого вывода? –

+0

The put - это список спам-писем с длинными заголовками, а выход - файл с заголовками до: как Cc: или To: – kman99

+0

Будет ли сообщение, что у меня было, когда я добираюсь до кубов – kman99

ответ

3

Использование sed или awk.

СЕПГ пример:

sed -e '/^[^:]*$/d' -e 's/\(.*\):.*/\1/' filename 
1

Если все, что вы хотите сделать, это отобразить первую часть согласованной линии, то вы можете сказать

grep your_pattern | cut -d: -f 1 

, но если вы хотите не совпадают с данными, после двоеточия вам нужен другой инструмент. Есть много инструментов, доступных sed, awk, perl, python и т.д. Например, код Perl будет выглядеть примерно так

perl -nle '($s) = split /:/; print $s if $s =~ /your_pattern/' 

или длинную версию сценария:

#!/usr/bin/perl 

use strict; 
use warnings; 

while (my $line = <>) { 
    my $substring = split /:/, $line; 
    if ($substring =~ /your_pattern/) { 
     print "$substring\n"; 
    } 
} 
1

(Я не уверен, что я полностью понимаю ваш вопрос)

вы должны использовать 'grep' AND 'cut', одно решение (хотя и далеко не идеальное):

$ cat file | grep ':' | вырезать -f 1 -d ':'

0

СЕПГ -n '/^$/q;/:/{s/:.*/:/;p;}'

Это остановит после всех обрабатываются заголовки.

Edit: немного улучшенная версия:

СЕПГ -n «/^$/д;/^ [^: \ т] {1}:/{s /:.*/:/; р ;} '

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