Печать нескольких пустых строк без повторения \n

Вы можете попробовать этот sed

sed -E '
  s/^/ /
  s/.*[^0-9]([0-9]+).?[bB][oO]{2}[kK][lL][eE][tT][sS].*/\1/
' infile
5
30.03.2020, 20:25
4 ответа

Если требуется решение POSIX, используйте:

петля

Помимо очевидного (и уродливого )цикла POSIX:

i=0; while [ "$((i+=1))" -le 7 ]; do echo; done

POSIX (портативный)

Существуют другие (более короткие, не обязательно более быстрые )решения:

(1 )Печатать пробелы, конвертировать в новые строки.

printf '%*s' 30 | tr ' ' '\n'

(2 )Или, чтобы получить 23 строки

seq 23 | tr -dc '\n'

(3 )Использование awk:

seq 23 | awk '{printf "\n"}'

(4 )Предполагается, что IFS используется по умолчанию

printf '%.0s\n' $(seq 23)

(5)sedдобавляет одну дополнительную новую строку, для 23 новых строк используйте 22:

printf '%0*d' 22 | sed 'y/0/\n/'

(6 )Некоторые оболочки автоматически создают все элементы массива с меньшими номерами.

zsh -c 'a[33]=1; printf "%.0s\n" "${a[@]}"'

(7 )Получить несколько байтов NUL

head -c 5 /dev/zero | tr '\0' '\n'

широко известный

Они относятся к более широко известным (и используемым )решениям:

(8 )Используйте headподсчет:

yes '' | head -n 23

(9)Не POSIX. Для некоторых оболочек (ksh, bash, zsh не менее):

printf '%.0s\n' {1..23}

другие языки

И, конечно же, использование(не POSIX )языков более высокого уровня:

(10 )Перл

perl -e 'print "\n" x 23'
perl -E 'say "\n" x 22'  

(11 )PHP

php -r 'echo str_repeat( "\n", 3 );'

(12 )Питон

python -c 'print("\n" * 3)'
7
19.03.2021, 02:31

Если вы используете bash, ksh93 или zsh,

printf '%.0s\n' {1..3}

создаст 3 новых строки. {1..3}расширяется до 1 2 3, а затем printfвыводит их как строки нулевой ширины, за которыми следует новая строка.

12
19.03.2021, 02:31
$ yes "" | head -30

, чтобы получить 30 новых строк.

6
19.03.2021, 02:31

Если можно использовать python, следующая команда ведет себя так, как вы хотите:

python -c 'print("\n" * 3)'
0
19.03.2021, 02:31

Теги

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