LINUX.ORG.RU

hexdump -Cv vm.dat

anonymous
()

Не знаю, почему у вас не работает, но если нужно удалить именно заданную строку, то в regexp нужно добавлять ″^″ и ″$″.

И не знаю, надёжно ли использовать ″-i″ в скриптах, что будет если на ФС в этот момент закончится место.

mky ★★★★★
()
Ответ на: комментарий от mky

И не знаю, надёжно ли использовать ″-i″ в скриптах

Так узнай.

что будет если на ФС в этот момент закончится место.

Очевидно, файл останется без изменений.

kike
()
Ответ на: комментарий от anonymous

Что-то недоговариваешь.

+1

$ echo -e "vm0 test\nvm1 test1" > delme.txt
$ sed -i '/vm0 test/d' delme.txt 
$ cat delme.txt 
vm1 test1

Kroz ★★★★★
()
Ответ на: комментарий от mky

Не знаю, почему у вас не работает, но если нужно удалить именно заданную строку, то в regexp нужно добавлять ″^″ и ″$″.

тогда может и не найти, если есть пробелы на конце или \r от ms-dos редактора. лучше вместо пробела писать \s\+, так найдёт и табуляции и т.п.

И не знаю, надёжно ли использовать ″-i″ в скриптах, что будет если на ФС в этот момент закончится место.

пять звёзд, и так гордишься своим невежеством…

Ну не знаешь — помолчи, за умного сойдёшь.

emulek
()

плохому танцору яйца мешают.

emulek
()
Ответ на: комментарий от emulek

или \r от ms-dos редактора

Тяжко у вас там слаке, приходится ms-dos редакторами конфиги править. Но, надо заметить, что для ЛОР более актуален макинтош, так что давай вариант регулярки, если в конфиге строки разделены '\r'

А по поводу места на ФС, если ты такой умный, объясни, почему ″sed -i″ версии 4.1.5 (и вобще все 4.1) в случае нехватки места удаляли за собой временный файл, а sed версии 4.2.1 (да и 4.2.2) оставляют не дописанный временный файл? А ещё лучше скажи что это правильно, и так и надо, чтобы скрипт после себя в случае какой ошибки не удалял временные файлы.

mky ★★★★★
()
Ответ на: комментарий от mky

Тяжко у вас там слаке, приходится ms-dos редакторами конфиги править.

не, иногда приходится править *.reg ☺

Но, надо заметить, что для ЛОР более актуален макинтош, так что давай вариант регулярки, если в конфиге строки разделены '\r'

такой файл для sed является одной строкой, т.ч. sed 's/\r/\n/g'

А по поводу места на ФС, если ты такой умный, объясни, почему ″sed -i″ версии 4.1.5 (и вобще все 4.1) в случае нехватки места удаляли за собой временный файл, а sed версии 4.2.1 (да и 4.2.2) оставляют не дописанный временный файл?

ты ничего не путаешь? Sed версии 4.1 временный файл вроде тоже оставляла, возможно поведение зависит от опций ФС и самой ФС. Очень сложно сделать такое редактирование, что-бы оно работало во всех ФС/ОС, да ещё и в аварийной ситуации.

Я посмотрю, как раз мне нужно это место глянуть…

А ещё лучше скажи что это правильно, и так и надо, чтобы скрипт после себя в случае какой ошибки не удалял временные файлы.

нет конечно. Однако глупо в аварийной ситуации рассчитывать на адекватное поведение. Иногда лучше просто завершиться, раз уж фэйл. Иногда — можно попытаться подчистить.

emulek
()
Ответ на: комментарий от emulek

Нет, не путаю. Сначала обнаружил на практике, потом поковырял исходник.

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

Может, стоило оформить баг-репорт, но я вобще считаю опцию ″-i″ избыточной и вредной, и предпочитаю в скриптах создавать временный файл.

mky ★★★★★
()
Ответ на: комментарий от mky

Может, стоило оформить баг-репорт

ИМХО да.

я вобще считаю опцию ″-i″ избыточной и вредной, и предпочитаю в скриптах создавать временный файл.

ИМХО опция -i нужна для ручной работы. А в скриптах я её тоже избегаю.

emulek
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.