У меня есть файл, который выглядит
a b c d
Предположим, я хочу добавить N строк (в примере 3, но на самом деле мне нужно 20 или 100 в зависимости от файла)
Я могу добавить одну пустую строку между ними с помощью sed
sed -i '0~1 a\\' file
Но sed -i '0~3 a\\' file вставляет одну строку каждые 3 строки.
sed -i '0~3 a\\' file
Вы можете использовать с GNU sed:
sed
sed -i 'G;G;G' file
. G;G;G добавит три пустые строки под каждой не финальной строкой.
G;G;G
Или, awk:
awk
awk 'BEGIN{ORS="\n\n\n"};1'
См. онлайн sed и awk demo .
Если вам нужно установить число новых строк, используйте
nl=" " awk -v nl="$nl" 'BEGIN{for(c=0;c<3;c++) v=v""nl;ORS=v};1' file > newfile
С GNU awk:
awk -i inplace -v lines=3 '{print; for(i=0;i<lines;i++) print ""}' file
Обновление с подсказками Эда (см. Комментарии):
awk -i inplace -v lines=3 '{print; for(i=1;i<=lines;i++) print ""}' file
Обновление (без конечных пустых строк):
awk -i inplace -v lines=3 'NR==1; NR>1{for(i=1;i<=lines;i++) print ""; print}' file
Вывод на file:
file
С sed и corutils:
N=4 sed "\$b;$(yes G\; | head -n$N)" infile
Подобный трюк с awk:
N=4 awk 1 RS="$(yes \\n | head -n$N | tr -d '\n')" infile
Это может работать для вас (GNU sed):
sed ':a;G;s/\n/&/2;Ta' file
Это добавит 2 пустые строки после каждой строки.
Измените 2 на любое число между каждой строкой.
Альтернатива (более эффективная?):
sed '1{x;:a;/^.\{2\}/!s/^/\n/;ta;s/.//;x};G' file