2015-05-01 3 views
0

Я пытаюсь добавить исключение из grep -v [[:punct:]], чтобы исключить строки с некоторыми предопределенными специальными символами. В следующем примере: - и _GREP out lines со специальными символами кроме

Вход:

Color red 
Color _ yellow 
Color blu+e 
Color gr-een 
Color bla!ck 

Ожидаемый результат:

Color red 
Color _ yellow 
Color gr-een 

ответ

2

Использование awk вы можете сделать:

awk '/[-_]/ || !/[[:punct:]]/' file 
Color red 
Color _ yellow 
Color gr-een 

Это получает строки, либо из эти:

  • имеет - или _.
  • не содержит [[:punct:]].

Для решения проблемы с линией, как Color _ yellow !, вы можете сделать:

awk '/[-_]/ {a=$0;gsub(/[-_]/,"",a);if (a!~/[[:punct:]]/) print} !/[[:punct:]]/' file 
+0

Я также думал об этом, но также печатал строки типа «Цвет _ желтый!», Который, как я думаю, не является предполагаемым поведением. – fedorqui

+0

@fedorqui Некоторые игры в гольф будут проводиться через тестирование, чтобы решить эту проблему, если это требование OPs. – Jotne

+1

@fedorqui Добавлено решение для удаления строк, таких как «Цвет _ желтый!» С выхода. – Jotne

1

Вместо того, чтобы выяснить, что вы хотите исключить, состояние, что вы хотите сохранить:

grep '^[[:alnum:][:blank:]_-]*$' 
Смежные вопросы