2015-01-21 2 views
1

Я ищу для поиска по строке, где я должен указать, что третий и четвертый символы не должны быть строчными. Это то, что у меня пока есть, но я не уверен, как указать оба символа в одной строке кода.Поиск по строкам без нижнего регистра

ls grep | $...[!a-z].$....[!a-z] 

ответ

1

Решение:

grep -e '^..[^a-z][^a-z].*$' test.txt 

test.txt:

abaXYom 
abCdef 
ghIJkl 
lalalolo papa 
234234234 

ВЫВОД:

ghIJkl 
234234234 
+0

'. *' На самом деле не нужен. «^» - метасимвол, указывающий начало строки. 2 точки представляют символы 1 и 2; любой символ разрешен. Поэтому элементы '[^ a-z]' представляют символы 3 и 4, и каждый говорит «ничего, кроме строчного». '. *' В конце означает что-нибудь, но вам не нужно явно сопоставлять это. Тестовые строки должны включать в себя 'abCdef' и' ghIJkl', причем ожидаемый результат включает вторую строку. –

+0

Спасибо. Это сработало! Я вижу, что вы заменили 3-ю и 4-ю точки. – raid434

+0

@JonathanLeffler вы правы, поэтому я добавил, что '. *' Состоял в том, что я также хотел добавить '' 'в конце выражения, но забыл сделать это (я неаккуратно). И вы также правы в том, что мой «unit-test» не включает все соответствующие случаи (я тоже ленив) :) исправлено! – alfasin

0

Попробуйте это. Я сделал следующее, и это сработало для меня.

ls | grep -e '^..[^a-z][^a-z].*$'

Пример:

mkdir abcD abcd abcde abCD ABCD ABcd abCDe 
ls | grep -e '^..[^a-z][^a-z].*$' 

Когда я выполнил эти команды, я иду следующий вывод:

$ ls | grep -e '^..[^a-z][^a-z].*$' 
ABCD 
abCD 
abCDe 
$ 

Вы пытаетесь ограничить нижний регистр с помощью [!a-z]. Для этой цели вы должны использовать [^a-z].

Надеюсь, это поможет.

+0

Чувак, ты опоздал на 19 минут ... – alfasin

+0

@alfasin: да .. Я начал писать ответ, а кто-то пришел к моему столу, прежде чем я смог опубликовать ответ. Итак, поздно! – anacron

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