¿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
printf
es 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.yes
solució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 2
Esto se puede parametrizar y no requiere una variable temporal, FWIW:
O, si
$N
es del tamaño de una matriz bash:fuente
seq
,yes
y{1..5}
no son POSIX 7.printf
el 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
seq
embargo, 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 eln
es 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
...$wojek100
son variables no existentes, se repetirá su palabra 100 veces sin nada más.fuente
$_
lugar de$wojek
aclare la intención.Repita los
n
tiempos, solo pongan-1
comas entre{}
:Repite 'helloworld' dos veces después del primer eco.
fuente
n
de una variable?Resultado
fuente
He experimentado advertencias de tuberías rotas con la
yes
solució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
x
operador de Perl , donde no obtiene automáticamente una nueva línea entre repeticiones:Explícitamente utilicé un
for
bucle 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