On Thu, Feb 21, 2013 at 10:07:42PM +0600, Voland Levit wrote: > Есть скрипт: > > #!/bin/sh > items="items.db" > sales="sales.db" > receivings="receivings.db" > errors="errors.db" > > clear > > echo -n "Input item: " > read x > > if [ "$(grep -i "$x" $items)" = "" ]; then > echo "No items in database" > echo "$(date '+%Y-%m-%d %H:%M') $x" >> error.db > else > grep $x $items | awk -F, '{printf "%-50s %10s\n", $2, $5}' > fi > > exit 0 > > Кусок items.db > > 2000785666604,Giulia Funny B53 Uni melange grigio,прочее,260.00,260.00,1.00 > 2280000001339,Venera 9400136 перчатки,прочее,380.00,380.00,1.00 > 000036950010,Venera 9500136 перчатки,прочее,320.00,320.00,1.00 > 2280000000233,Полотенце «Иди в баню»,прочее,85.00,85.00,1.00 > 2280000000042,Авангард полотенце махр.,прочее,98.00,98.00,1.00 > 2280000001254,Донецк.мануф. ПЛ-601-130 полотнце х/б > махр.,прочее,190.00,190.00,1.00 > > Проблема в строке проверки условния с grep. По задумке, если не находит > вхождение(-ий) в базе данных (проверка пустая ли строка) то выводит сообщение > и логирует. Проблема в том, что скрипт правильно работает только в случае, > если на вход подать число, к примеру 000. Но слова Дон и дон, уже подпадают > под разные ветвления. Как сделать, чтобы скрипт "искал" строку (включая > словосочитания) нормально. Вместо "$x" пробовал "\"$x\"" - не помогает.
Попробуйте, например, "правильную" форму использования grep/fgrep/egrep только для проверки, есть ли чего-то в файле или нет - флаг "-q": if fgrep -qe "$x" "$items"; then # есть else # нету fi Так решаете и проблему quoting-а. Кстати, если Вам действительно не нужна обработка metacharacters в тем, что ищете, можно пользовать fgrep вместо grep - так не будет false positives, напр. искать "а.в" и "найти" "абв". Всего лучшего, Петр -- Peter Pentchev r...@ringlet.net r...@freebsd.org p.penc...@storpool.com PGP key: http://people.FreeBSD.org/~roam/roam.key.asc Key fingerprint 2EE7 A7A5 17FC 124C F115 C354 651E EFB0 2527 DF13 This sentence contradicts itself - or rather - well, no, actually it doesn't!
signature.asc
Description: Digital signature