Bash: переписывание файла, который читается в той же строке

Вы можете использовать seq, tr и sed:

seq 15 | tr '\n' ' ' | sed 's/\([0-9]* [0-9]* [0-9]* [0-9]* [0-9]* \)/\1\
/g'

или как оптимизированную комбинацию ответов Оливье, Бенуа и меня (в его комментариях):

seq 15 | xargs -n 5
0
21.08.2018, 05:47
1 ответ

При выполнении такой команды

sed -e ... "datafile" >"datafile"

Вы получите результат нулевой длины. Причина в том, что оболочка устанавливает stdin и stdout перед выполнением команды. Таким образом, stdout посылается в файл datafile, создавая или усекая его в процессе, и только после этого sed -e ... "datafile" выполняется.

Обычным решением является нечто подобное

sed -e ... "datafile" >"datafile.tmp" && mv -f "datafile.tmp" "datafile"

Некоторые команды (включая версии sed) имеют возможность редактирования на месте:

sed -i.bak -e ... "datafile"
sed --in-place=.bak -e ... "datafile"
3
28.01.2020, 02:27

Теги

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