Вы можете попробовать этот sed
sed -E '
s/^/ /
s/.*[^0-9]([0-9]+).?[bB][oO]{2}[kK][lL][eE][tT][sS].*/\1/
' infile
Если требуется решение POSIX, используйте:
Помимо очевидного (и уродливого )цикла POSIX:
i=0; while [ "$((i+=1))" -le 7 ]; do echo; done
Существуют другие (более короткие, не обязательно более быстрые )решения:
(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)'
Если вы используете bash, ksh93 или zsh,
printf '%.0s\n' {1..3}
создаст 3 новых строки. {1..3}
расширяется до 1 2 3
, а затем printf
выводит их как строки нулевой ширины, за которыми следует новая строка.
Если можно использовать python, следующая команда ведет себя так, как вы хотите:
python -c 'print("\n" * 3)'