2014-09-16 2 views
0

У меня есть набор слов, который выглядит как:
fruits.txtGreping точное совпадение/подстрока

APPLE,2 
apple,3 
APPLE-ORANGE,3 
APPLEORANGE-GRAPE,5 

и пытается напечатать "яблоки" только.

вот что я пробовал, и почти все команды с аналогичной проблемой возвращают тот же результат следующим образом:
grep -iE "apple\b" fruits.txt
APPLE, 2
яблоко, 3
APPLE-ОРАНЖЕВЫЙ, 3 ## это дополнительную строку, которую я хочу игнорировать

также я пробовал следующее, но ничего не возвращал.
grep -i '^apple$' fruits.txt

ЗАПЛАНИРОВАННЫЕ
APPLE, 2
яблоки, 3

PS: Пожалуйста, не предлагают на grep -iE 'apple\b' fruits.txt | grep -v "-" я не могу использовать это в цикле в случае greping «Apple- ORANGE ", снова Это будет проблема.

+1

почему косяк мы Grep 'яблоко, ' – vks

+0

Планируется реализовать это вместе с' grep -w'; У меня «яблоко», как мой последний вариант. –

+0

Вы ищете решения, которые включают grep? если нет, вы можете использовать расширение параметра bash. – Ram

ответ

2

Try:

grep -i 'apple[ ,]' fruits.txt 
grep -iP 'apple\b(?=[\s,])' fruits.txt 

из

APPLE,2 
apple,3 
APPLE-ORANGE,3 
APPLEORANGE-GRAPE,5 
applE , 8 
AAple900 

как отпечатки

APPLE,2 
apple,3 
applE , 8 

Оба регулярных выражений ищут случае нечувствительны яблоко следует, по меньшей мере, один (пробел) или ,.

, если вы не хотите принимать (пробел) просто удалить группы символов ...

Или, вы должны сказать grep что не разрешено следовать apple, как:

grep -iP 'apple[^\w-]' fruits.txt 
grep -iE 'apple[^[:alnum:]-]' fruits.txt 

Искать apple Зачем не следует Слово символ или -.

+0

Это круто! правильные ответы с объяснением. Узнал новую вещь :) Спасибо, помощник! –

2

Вы можете использовать awk для выполнения этой задачи:

$ awk -F, -v IGNORECASE=1 '$1 ~ /^apple$/' fruits.txt 
APPLE,2 
apple,3 

Если вы хотите передать awk переменные оболочки для использования, вы можете сделать это:

$ fruit=apple 
$ awk -F, -v IGNORECASE=1 -v FRUIT="^$fruit\$" '$1 ~ FRUIT' fruits.txt 
APPLE,2 
apple,3 
+1

Замечательно! Это работает хорошо !и у меня есть быстрый вопрос; как я могу использовать его в цикле, я имел в виду вместо 'apple', как я могу использовать переменную типа' $ fruit'. Я попробовал 'awk -F -v FRUIT = $ fruit, IGNORECASE = 1 '$ 1 ~/^ FRUIT $ /' fruits.txt'. Но не повезло. –

+1

@ManivG Добро пожаловать, рад помочь! 'awk' обрабатывает текст внутри' /.../ 'как часть регулярного выражения, поэтому он не может расширять именованную переменную. Чтобы обойти это, вы можете поместить специальные символы регулярного выражения в определение переменной и оставить «/.../». См. Решение, добавленное в моем недавнем редактировании. –

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