2016-04-14 2 views
0

В течение жизни я не могу заставить эту часть моего задания Linux работать. Это требование:Удалить записи, которые соответствуют регулярному выражению с помощью sed

До сих пор мы имеем:

grep -iv chevy cars 

Теперь давайте удалить автомобили, которые являются $ 10000 или больше. Выполните вывод grep в sed, чтобы сделать это, удалив записи, соответствующие регулярному выражению , представляющему 5 (или более) цифр в конце записи (DO NOT используйте коэффициент повторения, например {5}, для это):

Я чувствую, как это должно быть:

grep -iv 'chevy' cars | sed '/[0-9][0-9][0-9][0-9][0-9]*/ d' 

Я пробовал много решений уже здесь .. и ничего не работает.

Входные данные:

plym fury 77  73  2500 
chevy nova 79  60  3000 
ford mustang 65  45  17000 
volvo gl  78  102  9850 
ford ltd  83  15  10500 
Chevy nova 80  50  3500 
fiat 600  65  115  450 
honda accord 81  30  6000 
ford thundbd 84  10  17000 
toyota tercel 82  180  750 
chevy impala 65  85  1550 
ford bronco 83  25  9525 
+0

мы можем увидеть образец входных данных. – zee

+0

Добавлены входные данные –

+0

Как насчет того, что команда 'sed' работает не так? –

ответ

0

Вы отсутствовали один лот [0-9]:

grep -vi chevy cars| sed '/[0-9][0-9][0-9][0-9][0-9][0-9]*$/d' 
plym fury 77 73 2500 
volvo gl 78 102 9850 
fiat 600 65 115 450 
honda accord 81 30 6000 
toyota tercel 82 180 750 
ford bronco 83 25 9525 

делает то, что вы хотите. все, что содержит пять или более цифр, опущено.

+0

Хотя регулярное выражение, которое вы * на самом деле хотите, возможно, просто '[0-9] [0-9] [0-9] [0-9] [0-9] $' – tripleee

1

Игнорирование, что программа вашего профессора ожидает именно эти требования (не должны начинаться с «Шевроле» или «шевроле», не должно заканчиваться цифрой с 5 или более цифр) также вписываться в одной SED команды:

$ sed '/^[Cc]hevy/d;/[[:digit:]]\{5,\}$/d' cars 
plym fury 77  73  2500 
volvo gl  78  102  9850 
fiat 600  65  115  450 
honda accord 81  30  6000 
toyota tercel 82  180  750 
ford bronco 83  25  9525 

или одну команду Grep:

$ grep -vi '^chevy\|[[:digit:]]\{5,\}$' cars 
plym fury 77  73  2500 
volvo gl  78  102  9850 
fiat 600  65  115  450 
honda accord 81  30  6000 
toyota tercel 82  180  750 
ford bronco 83  25  9525 

фактическое ввода содержит пробелы в конце строк, поэтому команды выше, не будет на самом деле работает. Если эти пробелы реальны, а не только результат копирования вставки, они должны быть приняты во внимание следующее:

sed '/^[Cc]hevy/d;/[[:digit:]]\{5,\}[[:blank:]]*$/d' cars 

и

grep -vi '^chevy\|[[:digit:]]\{5,\}[[:blank:]]*$' cars 

+0

Возможно, добавьте '$' для ограничения финального число regex до последнего столбца? (Предполагая, что это доллары, а не мили! :-) – tripleee

+0

Спасибо за это! –

+0

@ tripleee Я сделал это сначала, но вход в вопрос имеет (ложные?) Пробелы в конце строк ... будет обновлен, чтобы принять его во внимание. –

0

Попробуйте это:

[[email protected] tmp]# awk '$5<10000' aaaaaaa.csv 
plym fury 77  73  2500 
chevy nova 79  60  3000 
volvo gl  78  102  9850 
Chevy nova 80  50  3500 
fiat 600  65  115  450 
honda accord 81  30  6000 
toyota tercel 82  180  750 
chevy impala 65  85  1550 
ford bronco 83  25  9525 
0

автомобилей:

plym fury 77  73  2500 
chevy nova 79  60  3000 
ford mustang 65  45  17000 
volvo gl  78  102  9850 
ford ltd  83  15  10500 
Chevy nova 80  50  3500 
fiat 600  65  115  450 
honda accord 81  30  6000 
ford thundbd 84  10  17000 
toyota tercel 82  180  750 
chevy impala 65  85  1550 
ford bronco 83  25  9525 

Попробуйте это:

$ grep -iv 'chevy' cars | sed -r '/[0-9][0-9][0-9][0-9][0-9]+/d' 

Выход:

plym fury 77  73  2500 
volvo gl  78  102  9850 
fiat 600  65  115  450 
honda accord 81  30  6000 
toyota tercel 82  180  750 
ford bronco 83  25  9525 
0
awk '$5 < 10000 && !/[Cc]hevy/' file 
    plym fury 77  73  2500 
    volvo gl  78  102  9850 
    fiat 600  65  115  450 
    honda accord 81  30  6000 
    toyota tercel 82  180  750 
    ford bronco 83  25  9525 
Смежные вопросы