2014-04-22 4 views
1

Я пытаюсь распечатать все строки с хотя бы одним символом, который НЕ является числовым.Почему grep показывает строки, которые не совпадают?

Мой Grep код выглядит следующим образом: grep '[^[:digit:]]' GTEST

Где GTEST это:

TEST 
55 55 Pink 
123 
sss 
aaa 
ss aaa ss 
a 1 b 2 a b a 
Doop Dap 
12 13 
77a 
59360 

И выход именно то, что находится в GTEST, за исключением совпадающих частей линий (AKA все из альфа-символы) красным цветом. Вместо того, чтобы отображать совпадающие символы красным цветом, я/только/хочу распечатать строки, содержащие совпадающие символы.

Я искал теги grep (-o, -w и т. Д.), Но никто из них, похоже, не делает этого для меня.

Я что-то упустил?

EDITED:

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

TEST 
55 55 Pink 
sss 
aaa 
ss aaa ss 
a 1 b 2 a b a 
Doop Dap 
77a 
+6

Каждая строка на вашем входе имеет хотя бы один символ, который не является числовым. Не забывайте, что символ пробела '' также не является числовым. – merlin2011

+0

Просьба представить ожидаемый результат, чтобы уточнить, чего вы пытаетесь достичь. – merlin2011

+1

То есть, на самом деле, выход я получаю. 'grep (BSD grep) 2.5.1-FreeBSD' – Malvolio

ответ

3

Из данных, я получаю этот выход:

grep '[^[:digit:]]' file 
TEST 
55 55 Pink 
sss 
aaa 
ss aaa ss 
a 1 b 2 a b a 
Doop Dap 
12 13 
77a 

Вы получаете 12 13, так как пространство между 12 и 13 является несимметричный символ.
Это также даст выход, если у вас есть место до или после цифр, например: 123<space>

Чтобы преодолеть это, вы можете сделать так:

grep '[^[:digit:] ]' file 
TEST 
55 55 Pink 
sss 
aaa 
ss aaa ss 
a 1 b 2 a b a 
Doop Dap 
77a 

Или еще лучше:

grep '[^[:digit:][:blank:]]' file 
Смежные вопросы