URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID9
Нить номер: 9043
[ Назад ]

Исходное сообщение
"bash-скрипт"

Отправлено Александра , 21-Фев-11 10:36 
Всем привет!

Мне нужна ваша помощь!
Пишу небольшой скриптик и с основной задачей справилась, но столкнулась с проблемой, что когда обрабатываю бинарник командой strings, она "сжирает" пустые строки.
Может кто знает, как этого можно избежать?

И еще вопросик: подскажите как можно в бинарном файле отыскать пустую строку?

Заранее благодарю)


Содержание

Сообщения в этом обсуждении
"bash-скрипт"
Отправлено allez , 21-Фев-11 13:29 
> Всем привет!
> Мне нужна ваша помощь!
> Пишу небольшой скриптик и с основной задачей справилась, но столкнулась с проблемой,
> что когда обрабатываю бинарник командой strings, она "сжирает" пустые строки.
> Может кто знает, как этого можно избежать?
> И еще вопросик: подскажите как можно в бинарном файле отыскать пустую строку?
> Заранее благодарю)

Вот выдержка из man strings (http://www.opennet.me/man.shtml?topic=strings&category=1&rus...)


       -min-len
       -n min-len
       --bytes=min-len
           Print  sequences  of  characters that
           are at least min-len characters long,
           instead of the default 4.


Попробуйте указать в этой опции значение "1".


"bash-скрипт"
Отправлено pavlinux , 22-Фев-11 15:01 
> Пишу небольшой скриптик и с основной задачей справилась, но столкнулась с проблемой,
> что когда обрабатываю бинарник командой strings, она "сжирает" пустые строки.
> Может кто знает, как этого можно избежать?
> И еще вопросик: подскажите как можно в бинарном файле отыскать пустую строку?

В бинарном файле нет строк! :)
А то, что там встречается CR/LF это случайность, хотя с большой вероятностью.


"bash-скрипт"
Отправлено Andrey Mitrofanov , 22-Фев-11 15:05 
А переводы строки -- есть! %) Па-ра-докс...

"bash-скрипт"
Отправлено Pahanivo , 22-Фев-11 23:15 
> А переводы строки -- есть! %) Па-ра-докс...

нишутя себе! однако!


"bash-скрипт"
Отправлено anonymous , 22-Фев-11 23:25 
> Всем привет!
> Мне нужна ваша помощь!
> Пишу небольшой скриптик и с основной задачей справилась, но столкнулась с проблемой,
> что когда обрабатываю бинарник командой strings, она "сжирает" пустые строки.
> Может кто знает, как этого можно избежать?
> И еще вопросик: подскажите как можно в бинарном файле отыскать пустую строку?

выглядит как проблема X-Y http://mywiki.wooledge.org/XyProblem

что за основная задача-то?


"bash-скрипт"
Отправлено deplot , 23-Фев-11 19:30 
>> Всем привет!
>> Мне нужна ваша помощь!
>> Пишу небольшой скриптик и с основной задачей справилась, но столкнулась с проблемой,
>> что когда обрабатываю бинарник командой strings, она "сжирает" пустые строки.
>> Может кто знает, как этого можно избежать?
>> И еще вопросик: подскажите как можно в бинарном файле отыскать пустую строку?
> выглядит как проблема X-Y http://mywiki.wooledge.org/XyProblem
> что за основная задача-то?

В общем с тем, что я спрашивала, я уже разобралась.


У меня появился другой вопрос.
У меня есть много файликов в формате *txt, которые мне необходимо обработать(убрать пустые строки, добавить теги и.т.д) по одинаковому шаблону
Вопрос в следующем: все файлы хранятся в определенной директории, я загоняю их в массив, обрабатываю циклом каждый файл...

вот кусочек кода:

declare -a scr=$(ls)
for i in ${scr[*]};
do sed '/^$/d' $i |  sed 's/ZY/\n/g' $i | grep -v '^!' $i ;
done

и дальше тупик, так как весь результат выводится на экран, а мне нужно грубо говоря перезаписать файлы


"bash-скрипт"
Отправлено Pahanivo , 23-Фев-11 21:37 
>[оверквотинг удален]
> В общем с тем, что я спрашивала, я уже разобралась.
> У меня появился другой вопрос.
> У меня есть много файликов в формате *txt, которые мне необходимо обработать(убрать
> пустые строки, добавить теги и.т.д) по одинаковому шаблону
> Вопрос в следующем: все файлы хранятся в определенной директории, я загоняю их
> в массив, обрабатываю циклом каждый файл...
> вот кусочек кода:
> declare -a scr=$(ls)
> for i in ${scr[*]};
> do sed '/^$/d' $i |  sed 's/ZY/\n/g' $i | grep -v '^!' $i ;

эээ зачем во второй и далее комманде конвеера $i ???
> done

DIRLIST=`ls /some/dir`
TMPFILE=/var/mazafile
for i in $DIRLIST
do
sed 'blablabla' $i |  grep 'blablabla' | somebin 'blablabla' > $TMPFILE
mv $TMPFILE $i
done


"bash-скрипт"
Отправлено allez , 23-Фев-11 21:38 
>[оверквотинг удален]
> Вопрос в следующем: все файлы хранятся в определенной директории, я загоняю их
> в массив, обрабатываю циклом каждый файл...
> вот кусочек кода:
> declare -a scr=$(ls)
> for i in ${scr[*]};
> do sed '/^$/d' $i |  sed 's/ZY/\n/g' $i | grep -v
> '^!' $i ;
> done
> и дальше тупик, так как весь результат выводится на экран, а мне
> нужно грубо говоря перезаписать файлы

Попробуйте так:

do sed -i '/^$/d; s/ZY/\n/g; /^!/d' $i

P. S. Я намеренно не "причесывал" код и написал его, что называется, "быстро и грязно".
Облагородить его оставляю вам в качестве домашнего задания. :-)

"bash-скрипт"
Отправлено deplot , 25-Фев-11 10:58 
>[оверквотинг удален]
> Вопрос в следующем: все файлы хранятся в определенной директории, я загоняю их
> в массив, обрабатываю циклом каждый файл...
> вот кусочек кода:
> declare -a scr=$(ls)
> for i in ${scr[*]};
> do sed '/^$/d' $i |  sed 's/ZY/\n/g' $i | grep -v
> '^!' $i ;
> done
> и дальше тупик, так как весь результат выводится на экран, а мне
> нужно грубо говоря перезаписать файлы

Спасибо всем огромное)
Все работает)


"bash-скрипт"
Отправлено ill ates , 26-Фев-11 11:36 
>[оверквотинг удален]
>> вот кусочек кода:
>> declare -a scr=$(ls)
>> for i in ${scr[*]};
>> do sed '/^$/d' $i |  sed 's/ZY/\n/g' $i | grep -v
>> '^!' $i ;
>> done
>> и дальше тупик, так как весь результат выводится на экран, а мне
>> нужно грубо говоря перезаписать файлы
> Спасибо всем огромное)
> Все работает)

ну и огород вы тут нагородили дорогуша
Я вам просто немножечко намекну
sed -i '/^$/d; s/ZY/\n/g; /^!/d' /somefolder/*/subfolder?/subfolder[1,2,5]/*.txt


"bash-скрипт"
Отправлено allez , 26-Фев-11 20:02 
>[оверквотинг удален]
>>> do sed '/^$/d' $i |  sed 's/ZY/\n/g' $i | grep -v
>>> '^!' $i ;
>>> done
>>> и дальше тупик, так как весь результат выводится на экран, а мне
>>> нужно грубо говоря перезаписать файлы
>> Спасибо всем огромное)
>> Все работает)
> ну и огород вы тут нагородили дорогуша
> Я вам просто немножечко намекну
> sed -i '/^$/d; s/ZY/\n/g; /^!/d' /somefolder/*/subfolder?/subfolder[1,2,5]/*.txt

А мне вот хотелось бы узнать, откуда в вашем намеке взялся этот "огород":
>/somefolder/*/subfolder?/subfolder[1,2,5]/*.txt

И заодно как бы вам намекнуть потоньше, что ваш намек немножечко припозднился? :-)


"bash-скрипт"
Отправлено Pahanivo , 26-Фев-11 22:59 
> И заодно как бы вам намекнуть потоньше, что ваш намек немножечко припозднился?
> :-)

дааааа он походу решил побить рекорд по кол-ву идиотизма на квадратный пиксел ...


"bash-скрипт"
Отправлено pavlinux , 26-Фев-11 23:39 
>> И заодно как бы вам намекнуть потоньше, что ваш намек немножечко припозднился?
>> :-)
> дааааа он походу решил побить рекорд по кол-ву идиотизма на квадратный пиксел
> ...

Должон появиться Митрофанов и уложиться в sed и 6-8 символов. :)


"bash-скрипт"
Отправлено universite , 04-Мрт-11 00:47 

> Должон появиться Митрофанов и уложиться в sed и 6-8 символов. :)

Можно я попробую? :)


sed 's/'"$1"'/'"$2"'/g' $i | tee $i



"bash-скрипт"
Отправлено Andrey Mitrofanov , 04-Мрт-11 10:29 
>> Должон появиться Митрофанов и уложиться в sed и 6-8 символов. :)

Нет, то, что там выше _так даже я не ужму. :)

А вот это, благодаря новейшим изысканиям Учёных http://apenwarr.ca/log/?m=201102#28 , можно и сжать.

> Можно я попробую? :)
> sed 's/'"$1"'/'"$2"'/g' $i | tee $i

$ sed -i s/$1/$2/g $i


"bash-скрипт"
Отправлено universite , 04-Мрт-11 16:21 
>>> Должон появиться Митрофанов и уложиться в sed и 6-8 символов. :)
> Нет, то, что там выше _так даже я не ужму. :)
> А вот это, благодаря новейшим изысканиям Учёных http://apenwarr.ca/log/?m=201102#28
> , можно и сжать.
>> Можно я попробую? :)
>> sed 's/'"$1"'/'"$2"'/g' $i | tee $i
> $ sed -i s/$1/$2/g $i

без tee весь результат вылезет на экран


"bash-скрипт"
Отправлено allez , 05-Мрт-11 09:22 
> без tee весь результат вылезет на экран

А вот что говорит man sed о ключе -i:

       -i[SUFFIX], --in-place[=SUFFIX]

              edit files in place (makes backup if extension supplied)


В общем, с этим ключом sed ничего на экран не вываливает, а правит сам файл. ;-)

P. S. Кстати, с tee результат помимо файла вылезет также и на экран. :-)


"bash-скрипт"
Отправлено Pahanivo , 05-Мрт-11 11:47 
вам линейку дать чтобы удобней мерятся? :)

"bash-скрипт"
Отправлено allez , 05-Мрт-11 12:39 
> вам линейку дать чтобы удобней мерятся? :)

Дядьку, вы обо что толкуете? :)
Товарищ был мало-мало заблуждаться, я был мало-мало показать ему, где он заблудился,
вот и все, однако. :)


"bash-скрипт"
Отправлено Pahanivo , 05-Мрт-11 13:06 
топегстартер еще двадцать первого дня прошлого месяса положил на это ... ))

"bash-скрипт"
Отправлено allez , 05-Мрт-11 16:34 
> топегстартер еще двадцать первого дня прошлого месяса положил на это ... ))

Да кому он теперь нужен? :)
И без него (или нее) здесь достаточно интересно. :)


"bash-скрипт"
Отправлено universite , 05-Мрт-11 14:40 
>> без tee весь результат вылезет на экран
> А вот что говорит man sed о ключе -i:
>
       -i[SUFFIX], --in-place[=SUFFIX] 
>            
>   edit files in place (makes backup if extension supplied)
>

> В общем, с этим ключом sed ничего на экран не вываливает, а
> правит сам файл. ;-)


     -i extension
             Edit files in-place similarly to -I, but treat each file indepen-
             dently from other files.  In particular, line numbers in each
             file start at 1, the ``$'' address matches the last line of the
             current file, and address ranges are limited to the current file.
             (See Sed Addresses.)  The net result is as though each file were
             edited by a separate sed instance.

судя по всему, у нас разные sed и tee :)

"bash-скрипт"
Отправлено Pahanivo , 05-Мрт-11 14:44 
> судя по всему, у нас разные sed и tee :)

наконецта до кого то дошло ))


"bash-скрипт"
Отправлено Andrey Mitrofanov , 05-Мрт-11 16:05 
> судя по всему, у нас разные sed и tee :)

Не ровён час FreeBSD?
Если у тебя ещё и _bash "разный", то и вообще -- "юникс". 8-]


"bash-скрипт"
Отправлено Вова , 06-Мрт-11 13:01 
Уверен, что комментариев было бы на порядок меньше, если бы топик стартера звали бы не Александрой, а, например, Василием.