Есть ли какая-либо встроенная команда Linux, которая позволяет выводить строку, которая в n раз больше входной строки ??
linux
command-line
bash
shell
text-manipulation
Получить бесплатно
источник
источник
Ответы:
источник
printf
том , что он будет повторно применить лишние аргументы в строку формата, «перекручивание» бесплатно. Под «избытком» я подразумеваю, что аргументов больше, чем%
заполнителей.Вот старомодный способ, который довольно портативный:
Это более общепринятая версия ответа Адриана Петреску с использованием расширения скобки:
Это эквивалентно:
Это немного более краткая и динамичная версия щуки ответа:
источник
sed -n 'H;${x;s/\n//gp}'
аsed -n ':t;${s/\n//gp};N;bt'
другой -echo $(yes "HelloWorld" | head -n 10)
добавить пробел между каждой копией строки. Еще один способ состоит в том, чтобы пройти через него,tr -d '\n'
что также устраняет последний перевод строки.yes
Решение было именно то , что мне было нужно, так как я хотел , чтобы дублировать команду (выход которого колеблется). Таким образом:yes "$(my-command)" | head -n 2
Это может быть параметризовано и не требует временной переменной, FWIW:
Или, если
$N
это размер массива bash:источник
seq
,yes
и оно{1..5}
не является POSIX 7.printf
спецификаторе формата. Что если данные содержат строки формата? Это правильный способ динамически определять «точность» (длину):printf '%*s' "$N"
- сделать привычкой заключать строку формата в одинарные кавычки, чтобы предотвратить расширение переменной там.Несколько хороших способов уже упоминалось. Не могу забыть о старом добром,
seq
хотя:источник
{i..j}
Трюк никогда не возвращает пустой диапазон.)Возможно, другой способ, который является более общим и полезным для вас:
Оболочка bash более мощная, чем думает большинство людей :)
источник
yes
,printf
,for i in {1..5}
) , что еслиn
равен нулю, то возвращается пустая строка , не существует состояние 1. Также в связи с математической нотации для сравнения, легко компенсировали на 1 (например , путем изменения<=
в<
)Вы можете использовать трюк. Вывод пустой переменной ничего не печатает. Таким образом, вы можете написать:
Если
$wojek1 $wojek2
...$wojek100
несуществующие переменные, ваше слово будет повторяться 100 раз без чего-либо еще.источник
$_
вместо того, чтобы$wojek
сделать намерение более ясным.Повторите
n
раз, просто поставьтеn-1
запятые между{}
:Повторяет «helloworld» дважды после первого эха.
источник
n
из переменной?Результат
источник
Я получил предупреждение о сломанной трубе с
yes
решением, так что вот еще одна хорошая альтернатива:источник
основываясь на том, на что намекал @pike
для каждого символа в строке
Пример заголовка, подчеркнутого
=
символамибудет выводить
Кажется, это порт между Linux и OS X, и это делает меня счастливым.
NJoy!
источник
Если вы на BSD, вы можете просто использовать
seq
.источник
seq (GNU coreutils) 8.25
, это даетseq: format 'Hello, world' has no % directive
, заставляя директиву форматирования присутствовать. GNU coreutils используются, например, во многих дистрибутивах Linux и Cygwin. Включая информацию здесь для тех, кому не хватает информации, что она работает только в BSD seq.выходы
источник
Предполагая, что вы хотите что-то вроде
x
оператора Perl , где вы не получите автоматически новую строку между повторениями:Я явно использовал
for
цикл, потому что вы не можете писать{1..$n}
в bash: раскрытие скобки выполняется до подстановки переменной.источник
Не совсем встроенный в Linux, но если у вас установлен Python ..
Или в одной строке, как предложил комментатор:
источник
Никакой магии здесь:
seq 5 | awk '{print "Hello World"}'
источник
Попробуй это:
Создадим (сто тире):
источник