Меня странно подвела известная утилитка grep
Оказывается она не видит и пропускает строки начинающиеся
с символа ^@
Нигде в литературе такого не встречал-только пишут что grep универсальная
и пользуйтесь ей в поиске и по текствовым и в бинарных файлах. (ну и дела)
Теперь приходится подстраховыватся таким способом:
cat -v file | grep "patern"
grep ^@ означает что нужно найти строку первый символ которой @
а не найти строки с сочетанием ^@
символ ^ означает начало строки
чтобы найти ^@ нужно юзать grep [^@] - AFAIK
>grep ^@ означает что нужно найти строку первый символ которой @
>а не найти строки с сочетанием ^@
>символ ^ означает начало строки
>чтобы найти ^@ нужно юзать grep [^@] - AFAIKЯ наверное неправильно выразился:
^@ это один управляющий символ а не два - то есть \000 или NULL.Есть к примеру такой файл file1 :
llsafdjk
@^@^@^@^ABCD^@^@
nnnnМне нужно удостоверится что в нем содержится строки с ABCD
Делаю скрипт:
:
#
grep "ABCD" file1 2> /dev/null || {echo "ABCD в $0 не найдено!"; exit 0}
echo " Все нормально!" ; exit 0
#Результат:
# ABCD в file1 не найдено!
#
Если я сделаю так:
:
#
cat -v file1 | grep "ABCD" 2> /dev/null || {
echo "ABCD в $0 не найдено!"; exit 0
}
echo " Все нормально!" ; exit 0
#
Результат будет:
# Все нормально!Нигде я в описаниях и ман я такого случая не читал и в итоге немного
прогорел.
#!/bin/bash
#first parameter is a filename where expression
#which stored in second parameter must be searched
cat $1|grep $2 > /dev/null
if [ $? -eq 0 ];then
echo "$2 occured in $1"
else
echo "no $2 occured in $1"
fi
>#!/bin/bash
>#first parameter is a filename where expression
>#which stored in second parameter must be searched
>cat $1|grep $2 > /dev/null
>if [ $? -eq 0 ];then
> echo "$2 occured in $1"
>else
> echo "no $2 occured in $1"
>fiСтранно, но вышенаписанное есть тоько копия моего скрипта (но в bsh)
Я то вобщето хотел сообщить о непонятном поведении утилитки GREP
когда она встречает в тексте управляющий символ ^@ (NULL)..
не понял я чего-то
у меня этот скрипт работал без всяких глюков
>не понял я чего-то
>у меня этот скрипт работал без всяких глюковДорогой мой оппонент!
Речь не идет о примитивных шелл скриптах
Я всего лишь хотел предупредить о поведении утилиты GREP
Создайте файл в котором строки начинаются с управляющего
символа ^@
И утилилита GREP ничего!
НИЧЕГО! в в этом файле не найдет.
Что бы вы ей не задавали а аргументах.
Наконец вам пример:
^@ abcd
grep abcd file
#
Не видит она строки с начинающиеся с ^@
Это один знак ^@
В VI ПРекрасно видно..
abcd
>grep abcd file
>#
>Не видит она строки с начинающиеся с ^@
>Это один знак ^@
>В VI ПРекрасно видно..
Я к чему это говорю-
Некоторые хитро@опые программеры создают файлы в своих коммерческих
пакетах стабильной длины.
И забивают их символами ^@
А мне то тоже хоца там порытся...
>Меня странно подвела известная утилитка grep
>Оказывается она не видит и пропускает строки начинающиеся
>с символа ^@Мои опыты с оной:
$cat gg
test
rest$cat -v gg
^@test
^@rest$od -t a gg
0000000 nul t e s t nl nul r e s t nl
0000014$grep rest gg
Binary file gg matches$grep test gg
Binary file gg matches$grep est gg
Binary file gg matches$grep -a est gg
test
restработает как в Linux, так и во FreeBSD.
/poige
--
http://www.morning.ru/~poige/