В ответ на вопрос ОП выше об использовании sponge
без внешних зависимостей и использовании ответа @D.Shawley вы можете получить эффект губки только с зависимость от gawk
, что не редкость в Unix или Unix-подобных системах:
cat foo | gawk -voutfn=foo '{lines[NR]=$0;} END {if(NR>0){print lines[1]>outfn;} for(i=2;i<=NR;++i) print lines[i] >> outfn;}'
Проверка для NR>0
- усечение входного файла.
Чтобы использовать это в сценарии оболочки, измените -voutfn=foo
на -voutfn="$1"
или любой другой синтаксис, используемый вашей оболочкой для аргументов имени файла. Например:
#!/bin/bash
cat "$1" | gawk -voutfn="$1" '{lines[NR]=$0;} END {if(NR>0){print lines[1]>outfn;} for(i=2;i<=NR;++i) print lines[i] >> outfn;}'
Обратите внимание, что в отличие от реального sponge
, это может быть ограничено размером ОЗУ. sponge
фактически буферизует во временный файл, если необходимо.