Gibt es eine Methode, um mehrzeilige Ausgaben (Einzelausgaben) in derselben Zeile zu drucken?
Zum Beispiel, wenn die Ausgabe ist:
abc
def
qwerty
Ist es möglich zu drucken:
abcdefqwerty
command-line
scripts
text-processing
Shrinidhi Kulkarni
quelle
quelle
printf
+cat
+perl
Combo wird viel besser über gehandhabtperl -pe 's/\n//;END{printf "\n"}' input.txt
Single-Prozess , ohne Kommandosubstitution und Anführungszeichen und ohne UUOC. Vielleicht.Sie können Ihre mehrzeilige Ausgabe weiterleiten
awk
oder benutze
sed
:Beispiellauf
Weiterführende Literatur: Zeilenumbruch mit AWK · serverfault.SE beseitigen
quelle
Auch
your_command | paste -sd ''
was die nachlaufende Newline schont.quelle
Wenn Sie Perl dafür verwenden möchten, können Sie seine
chomp
Funktion verwenden:Weitere Details für Interessierte.
Sie können einen oder mehrere Dateinamen als nachfolgende Argumente übergeben.
In einigen Fällen möchten Sie dies möglicherweise nicht, können aber stattdessen zu diesem Befehl umleiten oder umleiten. (Diese Fähigkeiten - und diese Einschränkung - gelten auch für jede andere
perl -p
oderperl -n
basierte Lösung.)Wenn Sie also die Ausgabe aus dem laufenden Betrieb verarbeiten möchten
some-command
:Dies ist möglicherweise schneller als der Perl-Befehl in der Antwort von terdon . Newline-Zeichen (dargestellt durch
\n
) werden in dieser Situation nur am Ende von Zeilen angezeigt, da Perl damit bestimmt, wo die einzelnen Zeilen enden.s/\n//
Durchsucht die gesamte Zeile nach Zeilenumbrüchen undchomp
entfernt nur die Zeile am Ende (falls vorhanden, da die allerletzte Zeile möglicherweise eine enthält oder nicht).Die Leistung ist vielleicht nicht der Hauptgrund für den Vorzug
chomp
. Derperl
Befehl in der Antwort von terdon ist nur geringfügig langsamer, wenn Sie keine große Datei mit sehr langen Zeilen verarbeiten. Und wenn Sie Geschwindigkeit brauchen, ist der Weg von David Foerster wahrscheinlich immer noch schneller.chomp
ist jedoch genau das richtige Werkzeug, wenn Sie Perl verwenden, und ich denke, die Absicht vonchomp
ist klarer als die vons/\n//
. Letztendlich gibt es wahrscheinlich keine objektive Antwort darauf, was besser ist.Letzte Zeile drucken.
Ich empfehle jedoch, keine Befehlsersetzung (
$(
)
) zu verwenden, um sicherzustellen, dass eine nachgestellte Zeile gedruckt wird. Wenn der zu verarbeitende Text nicht kurz ist, ist er wahrscheinlich sehr langsam. Er muss den gesamten Text auf einmal erfassen und dann ausdrucken. Dadurch wird es schwieriger, Ihren Befehl zu verstehen. Stattdessen können Sie tun, was David Foerster vorgeschlagen hat, und dannecho
oderprintf '\n'
danach rennen .Wenn Sie von diesem Befehl aus weiterleiten oder (wie David Foerster zeigt) von diesem Befehl umleiten , können Sie ihn
{
;}
so einschließen , dass die Ausgabe beider Befehle zusammengenommen wird. Wenn Sie es nur auf dem Terminal drucken, können Sie es genau wie oben gezeigt ausführen. Dies funktioniert auch, wenn Sie an den Befehl weiterleiten oder ihn umleiten , daecho
/printf '\n'
tatsächlich keine Eingaben liest. Das heißt, das funktioniert:Während hier können Sie nicht einfach entfernen
{
;}
:Wenn Sie möchten, können Sie auch
perl
die letzte Zeile selbst drucken. Wie das umschließendeperl
undecho
in Befehle{
;}
, funktioniert dieser Ansatz auch wenn Sie Rohrleitungen oder Umleiten von ihm (und, wie alle Ansätze, das funktioniert , wenn Sie Rohrleitungen zu ihm, auch):Beachten Sie, dass der Befehl in der Antwort von terdon auch mit diesen Methoden zum Drucken der letzten neuen Zeile gut funktioniert. Beispielsweise:
quelle
perl -wpe 'chomp; END { print "\n" }
ist der gleiche Prozess, kleiner Vorteil gegenüber dem Hinzufügen von EchoNur-Shell-Methode verwenden:
quelle
Diese Antwort enthält eine Lösung für das Problem, das Sie erstellen möchten : Warum entfernt die Bash \ n in $ (cat-Datei)?
Wenn Sie tippen
cat myfile.txt
, sehen Sie:Aber wenn Sie tippen, werden
echo $(cat myfile.txt)
Sie sehen:Beachten Sie, dass diese Methode ein Leerzeichen einfügt, in dem sich neue separate Zeilen befanden. Dies erleichtert das Lesen der Ausgabe, hält sich jedoch nicht strikt an Ihren Fragenumfang.
quelle
Wenn Sie Bash verwenden, können Sie dies ohne externes Tool tun.
Ergebnis:
Mit dem ersten Befehl wird die mehrzeilige Ausgabe in ein Array umgewandelt, mit dem zweiten Befehl wird das Array in mehrere Argumente in einer Zeile umgewandelt.
quelle