Если у кого есть в наличии и кому не жалко, не могли бы вы выложить здесь два скрипта.
1. (Попроще) Подсчитывает в файле количество слов "add"
2. (Сложнее) Архивирует файл "App.log" в /var/log/App.N.bz2 где N - порядковый номер равный числу запуска скриптаЗаранее благодарен!
Perl вам поможет, товарищь!!!
>Если у кого есть в наличии и кому не жалко, не могли
>бы вы выложить здесь два скрипта.
>1. (Попроще) Подсчитывает в файле количество слов "add"
>2. (Сложнее) Архивирует файл "App.log" в /var/log/App.N.bz2 где N - порядковый номер
>равный числу запуска скрипта
>
>Заранее благодарен!
1. подсчитывает количество вхождений последовательности символов "add"
#!/usr/bin/bash
cat < FILE_NAME | grep -o "add" | grep -c "add"2. Если имеется ввиду за текущую сессию... то
#!/usr/bin/bash
if [ ! NUM_BZIP ]
then
export NUM_BZIP=1
else
NUM_BZIP=`expr $NUM_BZIP + 1`
fi
bzip2 -k App.log
mv App.bz2 /var/log/App.NUM_BZIP.bz2если за все время... то
#!/usr/bin/bash
if [ ! -f /var/log/NUM_BZIP ]
then
echo 1 > /var/log/NUM_BZIP
esle
NUM_BZIP=$( cat /var/log/NUM_BZIP )
NUM_BZIP=`expr NUM_BZIP + 1`
echo $NUM_BZIP >> /var/log/NUM_BZIP
fi
bzip2 -k App.log
mv App.bz2 /var/log/App.NUM_BZIP.bz2Удачи!
> NUM_BZIP=$( cat /var/log/NUM_BZIP )
> NUM_BZIP=`expr NUM_BZIP + 1`
> echo $NUM_BZIP >> /var/log/NUM_BZIPтут забыл подставить $
NUM_BZIP=`expr $NUM_BZIP + 1`
>>Если у кого есть в наличии и кому не жалко, не могли
>>бы вы выложить здесь два скрипта.
>>1. (Попроще) Подсчитывает в файле количество слов "add"
>>2. (Сложнее) Архивирует файл "App.log" в /var/log/App.N.bz2 где N - порядковый номер
>>равный числу запуска скрипта
>>
>>Заранее благодарен!
>
>
>1. подсчитывает количество вхождений последовательности символов "add"
>#!/usr/bin/bash
>cat < FILE_NAME | grep -o "add" | grep -c "add"Если Ваш grep не знает опцию -o
ну и всё-таки '\<слово\>' ищем (опции -w в POSIX тоже нет)
man sed | sed -n -e 's/\<sed\>/\n&\n/gp' | grep -c -e '^\<sed\>$'
>Если Ваш grep не знает опцию -oне знает
>ну и всё-таки '\<слово\>' ищем (опции -w в POSIX тоже нет)
>man sed | sed -n -e 's/\<sed\>/\n&\n/gp' | grep -c -e '^\<sed\>$'выдает 0 (ноль)
>>Если Ваш grep не знает опцию -o
>
>не знаетну так поставь тот, который знает.
>
>>Если Ваш grep не знает опцию -o
>
>не знает
>
>>ну и всё-таки '\<слово\>' ищем (опции -w в POSIX тоже нет)
>>man sed | sed -n -e 's/\<sed\>/\n&\n/gp' | grep -c -e '^\<sed\>$'
>
>выдает 0 (ноль)Может мана нет, или слова sed в нем нет :)
$ echo -e "l1\tsed;sed;\nl2 notsed;\nsed" | sed -n -e 's/\<sed\>/\n&\n/gp' | grep -c -e '^\<sed\>$'
3$ echo -e "l1\tsed;sed;\nl2 notsed;\nsed"
l1 sed;sed;
l2 notsed;
sed$ echo -e "l1\tsed;sed;\nl2 notsed;\nsed" | sed -n -e 's/\<sed\>/\n&\n/gp'
l1
sed
;
sed
;sed
здесь без '-c' для наглядности
$ echo -e "l1\tsed;sed;\nl2 notsed;\nsed" | sed -n -e 's/\<sed\>/\n&\n/gp' | grep -e '^\<sed\>$'
sed
sed
sedА у Вас не так?
>
>Может мана нет, или слова sed в нем нет :)
>есть и то и другое :)
>$ echo -e "l1\tsed;sed;\nl2 notsed;\nsed" | sed -n -e 's/\<sed\>/\n&\n/gp' | grep -c -e '^\<sed\>$'
выдает 0
>$ echo -e "l1\tsed;sed;\nl2 notsed;\nsed"
>l1 sed;sed;
>l2 notsed;
>sedда, это есть
>$ echo -e "l1\tsed;sed;\nl2 notsed;\nsed" | sed -n -e 's/\<sed\>/\n&\n/gp'
это ничего не выдает
>здесь без '-c' для наглядности
>$ echo -e "l1\tsed;sed;\nl2 notsed;\nsed" | sed -n -e 's/\<sed\>/\n&\n/gp' | grep -e '^\<sed\>$'и это ничего не выдает
>А у Вас не так?
Как видите. Для справки: версия FreeBSD 4.11
>
>>
>>Может мана нет, или слова sed в нем нет :)
>>
>
>есть и то и другое :)
>
>>$ echo -e "l1\tsed;sed;\nl2 notsed;\nsed" | sed -n -e 's/\<sed\>/\n&\n/gp' | grep -c -e '^\<sed\>$'
>
>выдает 0
>
>
>>$ echo -e "l1\tsed;sed;\nl2 notsed;\nsed"
>>l1 sed;sed;
>>l2 notsed;
>>sed
>
>да, это есть
>Тогда пробуем так
$ echo -e "l1\tsed;sed;\nl2 notsed;\nsed" | sed -e 's/\<sed\>/\n&\n/g'
>
>Тогда пробуем так
>$ echo -e "l1\tsed;sed;\nl2 notsed;\nsed" | sed -e 's/\<sed\>/\n&\n/g'
l1 sed;sed;
l2 notsed;
sed
>>
>>Тогда пробуем так
>>$ echo -e "l1\tsed;sed;\nl2 notsed;\nsed" | sed -e 's/\<sed\>/\n&\n/g'
>l1 sed;sed;
>l2 notsed;
>sedЕсть два особых случая(!) выражений в квадратных скобках: выражение `[[:<:]]' и `[[:>:]]' соответствует пустой строке в начале и конце слова соответственно. Слово определяется как последовательность символов, входящих в это слово, и отсутствие символов до и после этой последовательности. Словесные символы входят в класс символов alnum (это определяется в wctype(3)), куда входит еще и подчеркивание. Это совместимое, но не описываемое в POSIX 1003.2 дополнение, поэтому оно используется в программах, предназначенных для переноса на другие платформы (с соответствующим предупреждением).
Может это подойдет, у меня не работает
$ echo -e "l1\tsed;sed;\nl2 notsed;\nsed" | sed -e 's/[[:<:]]sed[[:>:]]/\n&\n/g'
>Может это подойдет, у меня не работает
>$ echo -e "l1\tsed;sed;\nl2 notsed;\nsed" | sed -e 's/[[:<:]]sed[[:>:]]/\n&\n/g'не работает :(
>
>>Может это подойдет, у меня не работает
>>$ echo -e "l1\tsed;sed;\nl2 notsed;\nsed" | sed -e 's/[[:<:]]sed[[:>:]]/\n&\n/g'
>
>не работает :(Короче читаем это. Насколько я понимаю сколь либо простой замены якорям \< и \> найти не удастся.
Matching words with \< and \>
Searching for a word isn't quite as simple as it at first appears. The string "the" will match the word "other." You can put spaces before and after the letters and use this regular expression: " the ." However, this does not match words at the beginning or end of the line. And it does not match the case where there is a punctuation mark after the word.There is an easy solution. The characters "\<" and "\>" are similar to the "^" and "$" anchors, as they don't occupy a position of a character. They do "anchor" the expression between to only match if it is on a word boundary. The pattern to search for the word "the" would be "\<[tT]he\>." The character before the "t" must be either a new line character, or anything except a letter, number, or underscore. The character after the "e" must also be a character other than a number, letter, or underscore or it could be the end of line character.
Одно из наипростейших решений:You can compensate by using the alternation mechanism. Matching the word "the" in the beginning, middle, end of a sentence, or end of a line can be done with the extended regular expression:
(^| )the([^a-z]|$)
There are two choices before the word, a space or the beginining of a line. After the word, there must be something besides a lower case letter or else the end of the line.
>если за все время... то
>#!/usr/bin/bash
>if [ ! -f /var/log/NUM_BZIP ]
> then
> echo 1 > /var/log/NUM_BZIPдобавить export NUM_BZIP=1
> esle
> NUM_BZIP=$( cat /var/log/NUM_BZIP )
> NUM_BZIP=`expr NUM_BZIP + 1`здесь, как уже сказано пропущен $ (NUM_BZIP=`expr $NUM_BZIP + 1`)
> echo $NUM_BZIP >> /var/log/NUM_BZIP
>fi
>bzip2 -k App.log
>mv App.bz2 /var/log/App.NUM_BZIP.bz2и здесь тоже mv App.bz2 /var/log/App.$NUM_BZIP.bz2
>
>Удачи!Спасибо!
>добавить export NUM_BZIP=1а завем во втором варианте экспорт?
мы записываем кол-во вызовов в файл. а не в переменную...
>и здесь тоже mv App.bz2 /var/log/App.$NUM_BZIP.bz2угук.. вечер был.. тупняк ))
>>добавить export NUM_BZIP=1
>
>а завем во втором варианте экспорт?
>мы записываем кол-во вызовов в файл. а не в переменную...
>Я конечно не силен в скриптах, но вроде бы без этого NUM_BZIP не инициализируется при первом запуске.
>Я конечно не силен в скриптах, но вроде бы без этого NUM_BZIP
>не инициализируется при первом запуске.
if [ ! -f /var/log/NUM_BZIP ] #если не существует файла NUM_BZIP в директории /var/log/
then
echo 1 > /var/log/NUM_BZIP #тогда создаем этот файл и записываем туда 1
esle
NUM_BZIP=$( cat /var/log/NUM_BZIP ) #если такой файл существуетЮ тогда считываем цифру, что там лежит
NUM_BZIP=`expr NUM_BZIP + 1` #увеличиваем это значение на единицу
echo $NUM_BZIP > /var/log/NUM_BZIP #перезаписываем в этот файл новое значение
fiЗ.Ы. пока коментировал нашел ошибку )))
в строке echo $NUM_BZIP > /var/log/NUM_BZIP должен стоять только один символ ">"
это означает, что файл будет переписан.
">>" - означает, что текст будет дописан в конец файла.
Если if здесь работает также как С++, то в ветку между else и fi мы не попадаем в первом запуске. В этом случае NUM_BZIP не проинициализирован. Так?
>Если if здесь работает также как С++, то в ветку между else
>и fi мы не попадаем в первом запуске. В этом случае
>NUM_BZIP не проинициализирован. Так?
не так. смотри условие и думай.