sed и вывод пути до файла

На самом деле это единственный раздел про unix на этом форуме

Модераторы: /dev/random, Модераторы разделов

Grih65kop
Сообщения: 145

sed и вывод пути до файла

Сообщение Grih65kop »

sed 's/.*abc\=//;s/cba.*//;' ./*
Выбираю при помощи sed и регулярного выражения нужный мне текст из файлов в каталоге, все работает.
Не могу добиться вывода имени файла т.е. например,

./file.txt то что выводит sed
./file2.txt то что выводит sed

т.к. необходимо знать в каком именно файле sed нашел строку.
Спасибо сказали:
Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current

Re: sed и вывод пути до файла

Сообщение drBatty »

Grih65kop писал(а):
21.09.2011 20:17
т.к. необходимо знать в каком именно файле sed нашел строку.

NoWay
sed такого не умеет, если не использовать конструкции вида s///e. (это уже не sed)
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали:
Аватара пользователя
Nazyvaemykh
Сообщения: 438
Статус: Подопытный участник

Re: sed и вывод пути до файла

Сообщение Nazyvaemykh »

В ближайшей новой версии GNU sed, кажется, это будет. Может быть, есть уже в разрабатываемой ветке, поглядите, может найдёте патчик.
¡ Страсть к разрушению есть творческая страсть!
Спасибо сказали:
Grih65kop
Сообщения: 145

Re: sed и вывод пути до файла

Сообщение Grih65kop »

Очень жаль. Мою задачу полностью решает egrep, но я не знаю как вывести при помощи него то что находится между "abc=" и "cba".
Спасибо сказали:
Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current

Re: sed и вывод пути до файла

Сообщение drBatty »

Grih65kop писал(а):
21.09.2011 20:38
Очень жаль. Мою задачу полностью решает egrep, но я не знаю как вывести

задачу в студию. а так не интересно.
Nazyvaemykh писал(а):
21.09.2011 20:27
В ближайшей новой версии GNU sed, кажется, это будет.

а оно надо?
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали:
Аватара пользователя
Nazyvaemykh
Сообщения: 438
Статус: Подопытный участник

Re: sed и вывод пути до файла

Сообщение Nazyvaemykh »

drBatty, надо.
¡ Страсть к разрушению есть творческая страсть!
Спасибо сказали:
Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current

Re: sed и вывод пути до файла

Сообщение drBatty »

Nazyvaemykh
лучше-бы сделали вывод команды = и прочих таких (r, R, etc) не в stdout, а в буфер...
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали:
Grih65kop
Сообщения: 145

Re: sed и вывод пути до файла

Сообщение Grih65kop »

drBatty писал(а):
21.09.2011 21:58
Grih65kop писал(а):
21.09.2011 20:38
Очень жаль. Мою задачу полностью решает egrep, но я не знаю как вывести

задачу в студию. а так не интересно.

Есть директория с файлами (их много) следующего содержания:

Код: Выделить всё

1file.txt
123: qqwwqwrfd: qd.dwd: abc=QQWWEERRTT cba=19

2file.txt
342: qqwwqwrfd: qd.dwd: abc=TTRREEWWQQ cba=51

3file.txt
456: qqwwqwrfd: qd.dwd: abc=AASSDDFFGG cba=21


Из этих файлов необходимо выбрать текст между "abc=" и "cba", делаю это при помощи sed'a

Код: Выделить всё

sed 's/.*abc\=//;s/cba.*//;' ./*


Вывод:
QQWWEERRTT
TTRREEWWQQ
AASSDDFFGG

Но в таком случаи в последствие мне не узнать из какого файла была взята строка.

При помощи grep'a можно добиться этого:

Код: Выделить всё

grep -o 'abc\=.*\ cba' ./*

Вывод:
./1file.txt:abc=QQWWEERRTT cba
./2file.txt:abc=TTRREEWWQQ cba
./3file.txt:abc=AASSDDFFGG cba

если бы в этом выводе было бы только то что находится между "abc=" и "cba", то он бы полностью меня устраивал.
Спасибо сказали:
Аватара пользователя
Alexxx
Сообщения: 892
Статус: --==XXX==--
ОС: Archlinux current

Re: sed и вывод пути до файла

Сообщение Alexxx »

так чтоли нельзя?

Код: Выделить всё

grep -o 'abc\=.*\ cba' ./* | sed 's/abc\=//;s/cba.*//'
Спасибо сказали:
Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current

Re: sed и вывод пути до файла

Сообщение drBatty »

Код: Выделить всё

find . -type f -printf "\n-%p\n" -exec cat -n {} \; | iconv -f cp1251 |sed -rn '/^-/{s///;h;b};\~<b>.*</b>~!b;s~</b>~\n&~g;G;s~^\s*([0-9]+).*<b>([^\n]*)\n</b>.*\n([^\n]+)$~\3:\1:\2~p'

выбирает всё, что написано между <b> и </b>
Вывод вида имя_файла:номер_строки:искомая_подстрока
Например для этой темы:

Код: Выделить всё

./index.php?showtopic=128553&pid=1182532&st=0&:175:Rus-Linux.net
./index.php?showtopic=128553&pid=1182532&st=0&:208:Здравствуйте, гость
./index.php?showtopic=128553&pid=1182532&st=0&:210:<a href="http://unixforum.org/index.php?amp;act=Search&amp;f=90" id="ipb-tl-search">Поиск</a>
./index.php?showtopic=128553&pid=1182532&st=0&:245:от студентов с запросами готовых решений по заданиям
./index.php?showtopic=128553&pid=1182532&st=0&:261:sed и вывод пути до файла
./index.php?showtopic=128553&pid=1182532&st=0&:374:Автор темы
./index.php?showtopic=128553&pid=1182532&st=0&:615:<!--coloro:#000000--><span style="color:#000000"><!--/coloro-->¡<!--colorc--></span><!--/colorc--> <!--coloro:#FF0000--><span style="color:#FF0000"><!--/coloro-->Страсть<!--colorc--></span><!--/colorc--><!--coloro:#FF8C00--><span style="color:#FF8C00"><!--/coloro--> к <!--colorc--></span><!--/colorc--><!--coloro:#FFFF00--><span style="color:#FFFF00"><!--/coloro-->разрушению<!--colorc--></span><!--/colorc--> <!--coloro:#9ACD32--><span style="color:#9ACD32"><!--/coloro-->есть<!--colorc--></span><!--/colorc--> <!--coloro:#4169E1--><span style="color:#4169E1"><!--/coloro-->творческая<!--colorc--></span><!--/colorc--> <!--coloro:#DDA0DD--><span style="color:#DDA0DD"><!--/coloro-->страсть<!--colorc--></span><!--/colorc-->!
./index.php?showtopic=128553&pid=1182532&st=0&:712:Автор темы
./index.php?showtopic=128553&pid=1182532&st=0&:946:<a href="http://unixforum.org/index.php?showuser=22879" target="_blank">drBatty</a>
./index.php?showtopic=128553&pid=1182532&st=0&:953:<!--coloro:#000000--><span style="color:#000000"><!--/coloro-->¡<!--colorc--></span><!--/colorc--> <!--coloro:#FF0000--><span style="color:#FF0000"><!--/coloro-->Страсть<!--colorc--></span><!--/colorc--><!--coloro:#FF8C00--><span style="color:#FF8C00"><!--/coloro--> к <!--colorc--></span><!--/colorc--><!--coloro:#FFFF00--><span style="color:#FFFF00"><!--/coloro-->разрушению<!--colorc--></span><!--/colorc--> <!--coloro:#9ACD32--><span style="color:#9ACD32"><!--/coloro-->есть<!--colorc--></span><!--/colorc--> <!--coloro:#4169E1--><span style="color:#4169E1"><!--/coloro-->творческая<!--colorc--></span><!--/colorc--> <!--coloro:#DDA0DD--><span style="color:#DDA0DD"><!--/coloro-->страсть<!--colorc--></span><!--/colorc-->!
./index.php?showtopic=128553&pid=1182532&st=0&:1063:=
./index.php?showtopic=128553&pid=1182532&st=0&:1167:Автор темы
./index.php?showtopic=128553&pid=1182532&st=0&:1350:1
./index.php?showtopic=128553&pid=1182532&st=0&:1351:0
./index.php?showtopic=128553&pid=1182532&st=0&:1511:Текстовая версия
./index.php?showtopic=128553&pid=1182532&st=0&:1550:ровно!
./index.php?showtopic=128553&pid=1182532&st=0&:1553:ровно!
./index.php?showtopic=128553&pid=1182532&st=0&:1555:"+_y+"
./index.php?showtopic=128553&pid=1182532&st=0&:1556:"+_m+"
./index.php?showtopic=128553&pid=1182532&st=0&:1558:"+_d+"
./index.php?showtopic=128553&pid=1182532&st=0&:1560:"+_y+"
./index.php?showtopic=128553&pid=1182532&st=0&:1561:"+_m+"
./index.php?showtopic=128553&pid=1182532&st=0&:1562:"+_d+"


кстати, админы, а что вы криво файлы составили?
почему страницы НЕ заканчиваются символом \n ???
Вы их что, в блокноте правите?! Из-за этого приходится скрипт усложнять - исправлять ваши ошибки :(
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали:
Аватара пользователя
/dev/random
Администратор
Сообщения: 5456
ОС: Gentoo

Re: sed и вывод пути до файла

Сообщение /dev/random »

drBatty писал(а):
22.09.2011 10:27
кстати, админы, а что вы криво файлы составили?
почему страницы НЕ заканчиваются символом \n ???
Вы их что, в блокноте правите?! Из-за этого приходится скрипт усложнять - исправлять ваши ошибки :(

Мы не правим страницы вообще. Их генерирует движок. Да, да, пора бы уже перейти на другой, я знаю, можно не напоминать.

А к слову об усложнении скрипта - если он обрабатывает данные, которые создавали не вы, то он должен быть готов ко всему: нестандартные концы строк, отсутствие концов строк вообще, недопустимые в заявленной кодировке последовательности байтов и т.д.
Спасибо сказали:
Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current

Re: sed и вывод пути до файла

Сообщение drBatty »

/dev/random писал(а):
22.09.2011 10:54
Мы не правим страницы вообще. Их генерирует движок.

но генерирует по шаблонам. А кто правит шаблоны?
/dev/random писал(а):
22.09.2011 10:54
А к слову об усложнении скрипта - если он обрабатывает данные, которые создавали не вы, то он должен быть готов ко всему: нестандартные концы строк, отсутствие концов строк вообще, недопустимые в заявленной кодировке последовательности байтов и т.д.

я-то готов. но тут вовсе не "нестандартный конец строки", а вообще отсутствие последней строки, если принимать за определение строки
последовательность символов оканчивающихся символом "конец строки"
У вас посл. строка вообще не кончается, а обрывается на EOF.
/dev/random писал(а):
22.09.2011 10:54
Да, да, пора бы уже перейти на другой, я знаю, можно не напоминать.

...да и кодировка cp1251 - не комильфо... Это всё-же UNIXforum, а не винфак ;)

По теме - есть ещё один вариант:

1. делаем шаблон типа:

Код: Выделить всё

#!/bin/sed -rnf
s/.*%BEGIN%(.*)%END%.*/%FILENAME%:\1/p


2. Ищем файлы, когда находим, меняем в шаблоне %FILENAME% на имя заданного файла.

3. Запускаем получившийся из шаблона скрипт с файлом в качестве параметра.

Такой способ будет работать быстрее если файлы большие.
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали:
Аватара пользователя
/dev/random
Администратор
Сообщения: 5456
ОС: Gentoo

Re: sed и вывод пути до файла

Сообщение /dev/random »

drBatty писал(а):
22.09.2011 13:47
но генерирует по шаблонам. А кто правит шаблоны?

Во-первых, они правятся через админку, в браузере. Как, куда и в каком формате их сохраняет движок - его дело. Во-вторых, в HTML нет понятия "строка", вне специальных контекстов (например, атрибутов в тегах) все пробельные символы равнозначны. Это поток символов, а не строк. В-третьих, тема не об этом.
Спасибо сказали:
LittleJohn
Сообщения: 5

Re: sed и вывод пути до файла

Сообщение LittleJohn »

Grih65kop писал(а):
22.09.2011 00:19

Код: Выделить всё

grep -o 'abc\=.*\ cba' ./*

Вывод:
./1file.txt:abc=QQWWEERRTT cba
./2file.txt:abc=TTRREEWWQQ cba
./3file.txt:abc=AASSDDFFGG cba

если бы в этом выводе было бы только то что находится между "abc=" и "cba", то он бы полностью меня устраивал.

Код: Выделить всё

grep -oP '(?<=abc=).*(?= cba=)' *txt

1file.txt:QQWWEERRTT
2file.txt:TTRREEWWQQ
3file.txt:AASSDDFFGG
Спасибо сказали:
Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current

Re: sed и вывод пути до файла

Сообщение drBatty »

/dev/random писал(а):
22.09.2011 13:59
Во-первых, они правятся через админку, в браузере.

а разве там нету возможности править шаблоны в нормальном текстовом редакторе? В phpBB есть. Вроде и в этом была такая фича (скорее фича - правка из браузера).
/dev/random писал(а):
22.09.2011 13:59
Во-вторых, в HTML нет понятия "строка", вне специальных контекстов (например, атрибутов в тегах) все пробельные символы равнозначны. Это поток символов, а не строк.

угу. я знаю. потому обычно прогоняю HTML(XML, etc) через предварительный фильтр, который режет и клеит строки.
/dev/random писал(а):
22.09.2011 13:59
В-третьих, тема не об этом.

Возможно. А может и нет. Если ТС решил распарсить HTML sed'ом, то он должен быть готов к этим "приятным" неожиданностям...
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали:
Аватара пользователя
/dev/random
Администратор
Сообщения: 5456
ОС: Gentoo

Re: sed и вывод пути до файла

Сообщение /dev/random »

drBatty писал(а):
22.09.2011 14:11
а разве там нету возможности править шаблоны в нормальном текстовом редакторе? В phpBB есть. Вроде и в этом была такая фича (скорее фича - правка из браузера).

Проверил. Шаблоны хранятся в БД, в таблице *_skin_templates.

drBatty писал(а):
22.09.2011 14:11
/dev/random писал(а):
22.09.2011 13:59
Во-вторых, в HTML нет понятия "строка", вне специальных контекстов (например, атрибутов в тегах) все пробельные символы равнозначны. Это поток символов, а не строк.

угу. я знаю. потому обычно прогоняю HTML(XML, etc) через предварительный фильтр, который режет и клеит строки.

Знаете. Тогда почему же говорите, будто отсутствие перевода строки - ошибка?
Спасибо сказали:
Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current

Re: sed и вывод пути до файла

Сообщение drBatty »

/dev/random писал(а):
22.09.2011 14:28
Проверил. Шаблоны хранятся в БД, в таблице *_skin_templates.

хм.. В phpBB шаблоны хранятся и в файлах, и в БД. Править их можно и там и там, но я предпочитаю править файлы, ибо в браузере не самый лучший текстовый редактор...
/dev/random писал(а):
22.09.2011 14:28
Знаете. Тогда почему же говорите, будто отсутствие перевода строки - ошибка?

потому, что я считаю(правильно?), что HTML == текстовый файл. Причём тот факт, что элементы разметки могут находится в разных строках, а так-же то, что одна строка из HTML не обязательно выводится как одна строка на экране, вовсе не отменяет этот факт. Но HTML файл, который отдаёт ваш движок НЕ является текстовым файлом.
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали:
Аватара пользователя
/dev/random
Администратор
Сообщения: 5456
ОС: Gentoo

Re: sed и вывод пути до файла

Сообщение /dev/random »

drBatty писал(а):
22.09.2011 14:39
хм.. В phpBB шаблоны хранятся и в файлах, и в БД. Править их можно и там и там, но я предпочитаю править файлы, ибо в браузере не самый лучший текстовый редактор...

В phpBB шаблоны хранятся в файлах и кэшируются в базе. В IPB - наоборот. При этом, полагаю, не нужно объяснять, что редактировать кэш - глупо?

drBatty писал(а):
22.09.2011 14:39
потому, что я считаю(правильно?), что HTML == текстовый файл. Причём тот факт, что элементы разметки могут находится в разных строках, а так-же то, что одна строка из HTML не обязательно выводится как одна строка на экране, вовсе не отменяет этот факт. Но HTML файл, который отдаёт ваш движок НЕ является текстовым файлом.

"Текстовый файл" - двусмысленное понятие. Если вы имеете в виду, что этот формат предназначен для хранения текста, то да, предназначен. Если вы имеете в виду, что это plain-text, то нет, это не plain-text.
Спасибо сказали:
Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current

Re: sed и вывод пути до файла

Сообщение drBatty »

/dev/random писал(а):
22.09.2011 15:22
В phpBB шаблоны хранятся в файлах и кэшируются в базе. В IPB - наоборот. При этом, полагаю, не нужно объяснять, что редактировать кэш - глупо?

ЕМНИП в phpBB шаблоны хранятся в файлах (базовые), в базе (изменяются в админке), и ещё и в кеше (тоже файлы, изменяются сами по себе).
/dev/random писал(а):
22.09.2011 15:22
"Текстовый файл" - двусмысленное понятие. Если вы имеете в виду, что этот формат предназначен для хранения текста, то да, предназначен. Если вы имеете в виду, что это plain-text, то нет, это не plain-text.

для вас - двусмысленное, для меня - однозначное: текстовый файл - последовательность строк. Строка - последовательность символов, которая завершается символом "перевод строки" (последний разный в разных системах, но он всегда есть). Если, кроме того, все символы из ASCII, то файл является plain-text'ом. Если нет - это обычный текстовый файл. Данное определение подходит не только для файла, но и для текстового потока. Ваши файлы не подходят под это определение, потому редактор (sed) работает неправильно.
/dev/random писал(а):
22.09.2011 10:54
недопустимые в заявленной кодировке последовательности байтов и т.д.

это тоже не подходит под моё определение - недопустимая последовательность байтов == НЕСИМВОЛ => не строка => не текст.
Определение далеко не искусственно - sed(и другие утилиты) может работать с текстовым файлом/потоком, но не с чем-то, что не является текстовым файлом/потоком. Как например странички на этом форуме.
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали:
Аватара пользователя
/dev/random
Администратор
Сообщения: 5456
ОС: Gentoo

Re: sed и вывод пути до файла

Сообщение /dev/random »

drBatty писал(а):
23.09.2011 07:39
ЕМНИП в phpBB шаблоны хранятся в файлах (базовые), в базе (изменяются в админке), и ещё и в кеше (тоже файлы, изменяются сами по себе).

Возможно, я уже забыл. Последний раз я имел дело с phpBB года 3 назад, может, больше. Поверю вам на слово.

drBatty писал(а):
23.09.2011 07:39
для вас - двусмысленное, для меня - однозначное: текстовый файл - последовательность строк. Строка - последовательность символов, которая завершается символом "перевод строки"

Если брать такое определение, то HTML _не является_ текстовым файлом. При этом множества "HTML" и "текстовый файл по вашему определению" пересекаются, но ни одно не является подмножеством другого.

drBatty писал(а):
23.09.2011 07:39
это тоже не подходит под моё определение - недопустимая последовательность байтов == НЕСИМВОЛ => не строка => не текст.
Определение далеко не искусственно - sed(и другие утилиты) может работать с текстовым файлом/потоком, но не с чем-то, что не является текстовым файлом/потоком. Как например странички на этом форуме.

А это уже не имеет отношения к определениям. Это вопрос безопасности. Независимо от входных данных, программа не имеет права скатываться к непредсказуемому поведению.
Спасибо сказали:
Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current

Re: sed и вывод пути до файла

Сообщение drBatty »

/dev/random писал(а):
23.09.2011 07:54
Если брать такое определение, то HTML _не является_ текстовым файлом.

скорее, HTML _может_ не являться текстовым файлом - стандарт это позволяет.
На самом деле, стандарты многое позволяют, например в C _можно_ писать x-- - --x;, это по стандарту _допустимо_, и по нему-же ведёт к неопределённости. Вопрос: а надо-ли такое писать IRL? Формально - это не ошибка, тут вы правы, однако на практике, вы создаёте сложности всем тем, кто работает с этим форумом не только через браузер. В т.ч. и себе.

[offtopic]кстати, а что вы не хотите перевести форум в UTF-8?[offtopic]
/dev/random писал(а):
23.09.2011 07:54
А это уже не имеет отношения к определениям. Это вопрос безопасности. Независимо от входных данных, программа не имеет права скатываться к непредсказуемому поведению.

тут другой случай: поведение RE (не только sed, а вообще glibc) вполне предсказуемое, мало того, ещё и подчиняется стандарту (ЕМНИП). Другое дело, оно несколько неожиданное - точка совпадает с любым СИМВОЛОМ, но она вовсе не обязана совпадать с НЕСИМВОЛОМ. Как я понял, совсем наоборот - обязана НЕ совпадать. Она и не совпадает. Потому поведение программ вполне предсказуемо, хотя и неожиданно. Ну и кроме того, декларируется корректная работа с текстом, причём _текст_ именно по моему определению, а в ситуации "мусор на входе" имеем "мусор на выходе", и это вполне нормальная (ИМХО) ситуация.
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали:
Аватара пользователя
/dev/random
Администратор
Сообщения: 5456
ОС: Gentoo

Re: sed и вывод пути до файла

Сообщение /dev/random »

drBatty писал(а):
23.09.2011 09:38
скорее, HTML _может_ не являться текстовым файлом - стандарт это позволяет.
На самом деле, стандарты многое позволяют, например в C _можно_ писать x-- - --x;, это по стандарту _допустимо_, и по нему-же ведёт к неопределённости. Вопрос: а надо-ли такое писать IRL? Формально - это не ошибка, тут вы правы, однако на практике, вы создаёте сложности всем тем, кто работает с этим форумом не только через браузер. В т.ч. и себе.

Во-первых, HTML, не являющийся текстовым файлом (по вашему определению), к неопределённости не ведёт, в отличие от конструкции `x-- - --x`. Во-вторых, для HTML следует использовать средства, которые действительно предназначены для работы с ним, и не полагаются на особенности, не требующиеся стандартом. Например, xsh. В-третьих, как я уже говорил, сохранением шаблонов занимается движок, и ради такой мелочи нырять в очередной раз в эту цистерну говнокода меня как-то не тянет.

drBatty писал(а):
23.09.2011 09:38
[offtopic]кстати, а что вы не хотите перевести форум в UTF-8?[offtopic]

Почему вы решили, что не хочу? Это ещё MadDog, насколько я помню, пытался сделать. К сожалению, эта версия движка имеет кучу багов в работе с utf-8. Есть новая, несовместимая с этой, но если уж менять движок, то лучше сразу на что-нибудь свободное.

drBatty писал(а):
23.09.2011 09:38
Ну и кроме того, декларируется корректная работа с текстом, причём _текст_ именно по моему определению, а в ситуации "мусор на входе" имеем "мусор на выходе", и это вполне нормальная (ИМХО) ситуация.

Я как раз об этом. "Мусор на выходе - мусор на выходе" - ущербный подход. Если на входе мусор, то на выходе должно быть корректное и безопасное сообщение об ошибке, а не мусор. К примеру, вы помните обсуждение насчёт sed, битого utf-8 и команды e? О том, что текст, содержащий не-символы, sed может неожиданно оставить как есть (вы только что ещё раз описали, почему), и если скрипт использует, к примеру, команду e, то ей при этом будет передан необработанный текст, автоматически делая скрипт одной большой уязвимостью? Вот оно, следствие подхода "мусор на входе - мусор на выходе".
Спасибо сказали:
Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current

Re: sed и вывод пути до файла

Сообщение drBatty »

/dev/random писал(а):
23.09.2011 10:12
Во-первых, HTML, не являющийся текстовым файлом (по вашему определению), к неопределённости не ведёт

с т.з. FireFox'а - да, не ведёт. С точки зрения UNIX-Like утилит - ведёт. Сложно сказать, как будет обработана оборванная последняя строка какой-то утилитой. Например старые версии crond'а такой строки просто не видели, а новые - видят. Разве это не неопределённость? В рассматриваемом случае, утилита cat строку выводит, проблема в том, что _следующая_ строка (имя следующего файла) склеивается с текущей. В итоге, sed обрабатывает две строки как одну. ИЧСХ никто не виноват - cat правильно выполняет свою работу (у неё работа - что вижу, то и пою), sed тоже всё делает правильно, но в итоге, имя файла съедается, и мне приходится насильно вставлять этот перевод строки, которого нет в "тексте". Ну и кроме того, мне приходится применять дополнительные меры что-бы обработать тот случай, когда перевод строки вставлен неправильно (если вы таки исправили формат, или если это первый файл).
/dev/random писал(а):
23.09.2011 10:12
Во-вторых, для HTML следует использовать средства, которые действительно предназначены для работы с ним, и не полагаются на особенности, не требующиеся стандартом.

не обязательно - как я уже говорил, достаточно предварительной фильтрации. УМВР.
/dev/random писал(а):
23.09.2011 10:12
В-третьих, как я уже говорил, сохранением шаблонов занимается движок, и ради такой мелочи нырять в очередной раз в эту цистерну говнокода меня как-то не тянет.

да... я счастлив, что мне не приходилось править этот ваш IBP уже полтора года. Надеюсь - не придётся ещё столько-же :)
/dev/random писал(а):
23.09.2011 10:12
Почему вы решили, что не хочу? Это ещё MadDog, насколько я помню, пытался сделать. К сожалению, эта версия движка имеет кучу багов в работе с utf-8. Есть новая, несовместимая с этой, но если уж менять движок, то лучше сразу на что-нибудь свободное.

ждём...
/dev/random писал(а):
23.09.2011 10:12
Я как раз об этом. "Мусор на выходе - мусор на выходе" - ущербный подход. Если на входе мусор, то на выходе должно быть корректное и безопасное сообщение об ошибке, а не мусор. К примеру, вы помните обсуждение насчёт sed, битого utf-8 и команды e? О том, что текст, содержащий не-символы, sed может неожиданно оставить как есть (вы только что ещё раз описали, почему), и если скрипт использует, к примеру, команду e, то ей при этом будет передан необработанный текст, автоматически делая скрипт одной большой уязвимостью? Вот оно, следствие подхода "мусор на входе - мусор на выходе".

на практике я тоже НЕ использую команду e, я использую команду s///e. Она отличается тем, что в ситуации "мусор на входе" не происходит ни замены, ни тем более исполнения, что во первых безопасно, а во вторых легко отслеживается, т.к. флаг перехода не будет установлен (конечно условие должно быть очень жёстким). Вот тут-то и нужно передать управление на вывод сообщения об ошибке, или на обработку особого случая. И даже если этого не сделать, то злоумышленник всё равно не сможет выполнить вредоносный код.
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали: