LINUX.ORG.RU

shell: изменить файл in place


0

0

Хочу выполнять некоторые операции над файлами in place при помощи пайпов.

Допустим, у sed есть соответствующий ключик, а что делать в той ситуации, когда ключа нет?

Записать в другой файл, а потом выполнить mv? Или есть более простой способ?
Перемещено Dimez из Talks

★★★★

Re: shell: изменить файл in place

Блин; опять разделом промахнулся :( Перенесите, пожалуйста.

Davidov ★★★★ ()

Re: shell: изменить файл in place

> Записать в другой файл, а потом выполнить mv? Или есть более простой способ?

Другой-файл-потом-mv — это самое надежное, у тебя получается примитивный, но механизм транзакций в виде бонуса.

shimon ★★★★★ ()

Re: shell: изменить файл in place

> Хочу выполнять некоторые операции над файлами in place при помощи пайпов.

Именно пайпов? не получится, ИМХО. Ну или приведи пример того, чего хочешь.

> Допустим, у sed есть соответствующий ключик

Сильно подозреваю, что он сводится к автоматизации "другой-файл-потом-mv", потому что весь промежуточный результат всё равно нужно хранить.

tailgunner ★★★★★ ()

Re: shell: изменить файл in place

Возьми ed

sdio ★★★★★ ()
Ответ на: Re: shell: изменить файл in place от tailgunner

Re: shell: изменить файл in place

>Ну или приведи пример того, чего хочешь.

sort list > list

>Сильно подозреваю, что он сводится к автоматизации

Мне бы хватило и автоматизации, но чтобы это было от меня скрыто.

Davidov ★★★★ ()

Re: shell: изменить файл in place

Мне почему-то кажется, что в Plan 9 это можно
обычным перенаправлением вывода делать.
Не могу нагуглить сейчас.

Sphinx ★★☆☆ ()

Re: shell: изменить файл in place

"Unlike a shell redirect, sponge soaks up all its input before opening the output file" - ты уверен, что именно это тебе надо? Она рухнет на файле больше 2-3 гигабайт, и не заметит ошибки на другой стороне конвейера.

tailgunner ★★★★★ ()
Ответ на: Re: shell: изменить файл in place от tailgunner

Re: shell: изменить файл in place

>Она рухнет на файле больше 2-3 гигабайт

Не факт. По хорошему её нужно переписать так, чтобы она делала это в temporary файл, а потом переименовывала (с созданием бэкапа). Вот это было бы круто.

>и не заметит ошибки на другой стороне конвейера.

Я такие вещи делаю только на простых конвейерах, и сначала на stdout проверяю.

Davidov ★★★★ ()
Ответ на: Re: shell: изменить файл in place от Davidov

Re: shell: изменить файл in place

Зачем переписывать костыли, если можно спокойно самому использовать темпфайлы?

Lumi ★★★★★ ()
Ответ на: Re: shell: изменить файл in place от Davidov

Re: shell: изменить файл in place

>> Она рухнет на файле больше 2-3 гигабайт

> Не факт.

А ты попробуй :)

>>и не заметит ошибки на другой стороне конвейера.

>Я такие вещи делаю только на простых конвейерах, и сначала на stdout проверяю.

ммм... причем тут сложность конвейера и что такое "проверка на stdout"?

tailgunner ★★★★★ ()
Ответ на: Re: shell: изменить файл in place от Lumi

Re: shell: изменить файл in place

Есть регулярно повторяемое действие. Значит его нужно автоматизировать.

Davidov ★★★★ ()
Ответ на: Re: shell: изменить файл in place от tailgunner

Re: shell: изменить файл in place

>ммм... причем тут сложность конвейера

Почти нет шанса необратимо убить данные (из-за того, что неправильно написал какую-то опцию).

>что такое "проверка на stdout"?

Ну я имел в виду, что сначала нужно посмотреть глазами head и tail, проверить wc -l. Только потом использовать sponge.

Davidov ★★★★ ()
Ответ на: Re: shell: изменить файл in place от Davidov

Re: shell: изменить файл in place

Не вижу никаких противоречий, автоматизируй, используя временные файлы.

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