Проверить поддержку Linux FAT32 [закрыто]

Для sed 's/cat/dog/' или любой другой подстановки, не меняющей размер файла, с любой Bourne-подобной оболочкой можно сделать:

sed 's/cat/dog/' < file 1<> file

Малоизвестный, но более чем 35-летний¹ стандартный оператор - открыть файл в режиме чтения+записи без усечения. По сути, это заставляет sed записывать свой вывод поверх своего ввода. Важно убедиться, что вывод не перезаписывает части файла, которые sed еще не прочитал.

Для замен, которые приводят к уменьшению размера файла, с ksh93:

sed 's/hippopotamus/ant/' < file 1<>; file

;, расширение ksh93 - это то же самое, что , за исключением того, что если перенаправляемая команда успешна, файл усекается в том месте, где команда завершилась.

Или с perl:

perl -pe 's/hippopotamus/ant/;
          END{truncate STDOUT, tell STDOUT}' < file 1<> file

Для всего остального просто используйте стандартную форму:

cp -i file file.back &&
  sed 's/dog/horse/g' < file.back > file # && rm -f file.back

¹ Хотя первоначальная реализация в оболочке Bourne и ранних версиях оболочки Korn была фактически сломана, исправлена в конце 80-х. А оболочка Almquist изначально не поддерживала его.

0
11.12.2014, 16:08
0 ответов

Теги

Похожие вопросы