Gibt es einen integrierten Linux-Befehl, der die Ausgabe einer Zeichenfolge ermöglicht, die n-mal eine Eingabezeichenfolge ist?
linux
command-line
bash
shell
text-manipulation
GetFree
quelle
quelle
Antworten:
quelle
printf
ist , dass es immer wieder überschüssige Argumente an den Format - String, „Looping“ kostenlos an. Mit "Überschuss" meine ich, dass es mehr Argumente als%
Platzhalter gibt.Hier ist ein altmodischer Weg, der ziemlich portabel ist:
Dies ist eine konventionellere Version von Adrian Petrescus Antwort mit Klammererweiterung:
Das entspricht:
Dies ist eine etwas präzisere und dynamischere Version der Antwort von Pike :
quelle
sed -n 'H;${x;s/\n//gp}'
oder einesed -n ':t;${s/\n//gp};N;bt'
andere,echo $(yes "HelloWorld" | head -n 10)
die ein Leerzeichen zwischen jeder Kopie der Zeichenfolge hinzufügt. Ein weiterer Weg besteht darin, estr -d '\n'
durchzuleiten, wodurch auch der letzte Zeilenumbruch beseitigt wird.yes
Lösung war genau das, was ich brauchte, da ich einen Befehl duplizieren wollte (dessen Ausgabe schwankt). Also:yes "$(my-command)" | head -n 2
Dies kann parametrisiert werden und erfordert keine temporäre Variable, FWIW:
Oder wenn
$N
es die Größe eines Bash-Arrays hat:quelle
seq
,yes
und{1..5}
es handelt sich nicht um POSIX 7.printf
den Formatbezeichner von mischen . Was ist, wenn die Daten Formatzeichenfolgen enthalten? Dies ist der richtige Weg, um die "Genauigkeit" (Länge) dynamisch anzugeben:printf '%*s' "$N"
- Machen Sie es sich zur Gewohnheit, die Formatzeichenfolge in einfache Anführungszeichen zu setzen, um eine variable Erweiterung dort zu verhindern.Einige gute Möglichkeiten wurden bereits erwähnt. Ich kann aber nicht gut alt vergessen
seq
:quelle
{i..j}
Trick gibt niemals einen leeren Bereich zurück.)Vielleicht eine andere Möglichkeit, die allgemeiner und nützlicher für Sie ist:
Die Bash-Shell ist mächtiger als die meisten Leute denken :)
quelle
yes
,printf
,for i in {1..5}
) , dass , wenn dien
Null, es leeren String zurück , ohne existieren Status 1. Auch aufgrund der mathematischen Notation zum Vergleich, ist es leicht um 1 versetzt zu haben (zB durch die Veränderung<=
zu<
)Sie können einen Trick verwenden. Das Echo einer leeren Variablen gibt nichts aus. So können Sie schreiben:
Wenn
$wojek1 $wojek2
...$wojek100
nicht existierende Variablen sind, werden Sie Ihr Wort 100-mal ohne irgendetwas anderes wiederholen lassen.quelle
$_
anstelle$wojek
die Absicht klarer.Wiederholen Sie die
n
Zeiten, setzen Sie einfachn-1
Kommas zwischen{}
:Wiederholt 'helloworld' zweimal nach dem ersten Echo.
quelle
n
von einer Variablen bekommen will ?Ergebnis
quelle
Ich habe mit der
yes
Lösung Rohrbruchwarnungen erhalten. Hier ist eine weitere gute Alternative:quelle
basierend auf dem, was @pike andeutete
für jedes Zeichen in der Zeichenfolge Echo-Zeichenfolge
Ein Beispiel für eine mit
=
Zeichen unterstrichene Überschriftwird ausgegeben
Dies scheint zwischen Linux und OS X zu portieren und das freut mich.
nJoy!
quelle
Wenn Sie auf BSD sind, können Sie nur verwenden
seq
.quelle
seq (GNU coreutils) 8.25
ergibt diesseq: format 'Hello, world' has no % directive
eine Formatierung Richtlinie zwingt anwesend zu sein. GNU-Coreutils werden zB in vielen Linux-Distributionen und in Cygwin verwendet. Einschließlich der Informationen hier für diejenigen, denen die Information fehlt, dass es nur in BSD-seq funktioniert.Ausgänge
quelle
Angenommen, Sie möchten so etwas wie den
x
Operator von Perl , bei dem Sie zwischen den Wiederholungen nicht automatisch einen Zeilenumbruch erhalten:Ich habe explizit eine
for
Schleife verwendet, da Sie nicht{1..$n}
in bash schreiben können : Die Erweiterung der Klammern erfolgt vor der Variablensubstitution.quelle
Nicht unbedingt in Linux integriert, aber wenn Sie Python installiert haben.
Oder in einer Zeile, wie vom Kommentator vorgeschlagen:
quelle
Keine Magie hier:
seq 5 | awk '{print "Hello World"}'
quelle
Probier diese:
Wird erstellen (einhundert Bindestrich):
quelle