¿Existe algún comando de Linux incorporado que permita generar una cadena que sea n veces una cadena de entrada?
linux
command-line
bash
shell
text-manipulation
Liberarse
fuente
fuente

Respuestas:
fuente
printfes que aplicará repetidamente argumentos en exceso a la cadena de formato, "bucleando" de forma gratuita. Por "exceso", quiero decir que hay más argumentos que%marcadores de posición.Aquí hay una forma anticuada que es bastante portátil:
Esta es una versión más convencional de la respuesta de Adrian Petrescu usando la expansión de llaves:
Eso es equivalente a:
Esta es una versión un poco más concisa y dinámica de la respuesta de Pike :
fuente
sed -n 'H;${x;s/\n//gp}'used -n ':t;${s/\n//gp};N;bt'otra es hacer loecho $(yes "HelloWorld" | head -n 10)que agrega un espacio entre cada copia de la cadena. Otra forma es canalizarlo, lotr -d '\n'que también elimina la nueva línea final.yessolución era exactamente lo que necesitaba, ya que quería duplicar un comando (cuya salida fluctúa). Por lo tanto:yes "$(my-command)" | head -n 2Esto se puede parametrizar y no requiere una variable temporal, FWIW:
O, si
$Nes del tamaño de una matriz bash:fuente
seq,yesy{1..5}no son POSIX 7.printfel especificador de formato. ¿Qué pasa si los datos contienen cadenas de formato? Esta es la forma correcta de especificar dinámicamente la "precisión" (longitud):printf '%*s' "$N"- habitúese a encerrar la cadena de formato entre comillas simples para evitar la expansión de variables allí.Algunas buenas maneras ya mencionadas. Sin
seqembargo, no puedo olvidar lo bueno :fuente
{i..j}truco nunca devuelve un rango vacío.)Quizás otra forma que sea más general y útil para usted:
El bash shell es más poderoso de lo que la mayoría de la gente piensa :)
fuente
yes,printf,for i in {1..5}) que si elnes cero, devuelve una cadena vacía y sin existir estado de 1. También debido a la notación matemática para la comparación, es fácil haber compensado por 1 (por ejemplo, cambiando la<=que<)Puedes usar un truco. Hacer eco de una variable vacía no imprime nada. Entonces puedes escribir:
Si
$wojek1 $wojek2...$wojek100son variables no existentes, se repetirá su palabra 100 veces sin nada más.fuente
$_lugar de$wojekaclare la intención.Repita los
ntiempos, solo pongan-1comas entre{}:Repite 'helloworld' dos veces después del primer eco.
fuente
nde una variable?Resultado
fuente
He experimentado advertencias de tuberías rotas con la
yessolución, así que aquí hay otra buena alternativa:fuente
basado en lo que @pike estaba insinuando
por cada caracter en string echo string
Un ejemplo de un encabezado subrayado con
=caracteres.saldrá
Esto parece tener un puerto entre Linux y OS X y eso me hace feliz.
nJoy!
fuente
Si estás en BSD, puedes usarlo
seq.fuente
seq (GNU coreutils) 8.25, esto daseq: format 'Hello, world' has no % directive, obligando a una directiva de formato a estar presente. GNU coreutils se utilizan, por ejemplo, en muchas distribuciones de Linux y Cygwin. Incluyendo la información aquí para aquellos que faltan la información de que solo funciona en BSD seq.salidas
fuente
Suponiendo que desea algo como el
xoperador de Perl , donde no obtiene automáticamente una nueva línea entre repeticiones:Explícitamente utilicé un
forbucle porque no puedes escribir{1..$n}en bash: la expansión de llaves se realiza antes de la sustitución de variables.fuente
No está exactamente integrado en Linux, pero si tienes Python instalado ...
O en una línea, como sugirió el comentarista:
fuente
No hay magia aquí:
seq 5 | awk '{print "Hello World"}'fuente
Prueba este:
Creará (cien guiones):
fuente