it-swarm.com.de

Wie verkettet man mehrere Ausgabezeilen zu einer Zeile?

Wenn ich den Befehl cat file | grep pattern, Ich bekomme viele Ausgabezeilen. Wie verkettet man alle Zeilen zu einer Zeile und ersetzt effektiv jede "\n" mit "\" " (Ende mit " gefolgt von Leerzeichen)?

cat file | grep pattern | xargs sed s/\n/ /g arbeitet nicht für mich.

113
T. Webster

Verwenden tr '\n' ' ' um alle Zeilenumbrüche in Leerzeichen zu übersetzen:

$ grep pattern file | tr '\n' ' '

Hinweis: grep liest Dateien, cat verkettet Dateien. Nicht cat file | grep!

Edit:

tr kann nur Einzelzeichenübersetzungen verarbeiten. Sie können awk verwenden, um das Trennzeichen für Ausgabedatensätze wie folgt zu ändern:

$ grep pattern file | awk '{print}' ORS='" '

Dies würde verwandeln:

one
two 
three

zu:

one" two" three" 
174
Chris Seymour

Wenn Sie die Ausgabe an xargs weiterleiten, wird jede Ausgabezeile zu einer einzelnen Zeile mit Leerzeichen verkettet:

grep pattern file | xargs

Oder irgendein Befehl, z. ls | xargs. Die Standardbeschränkung für die Ausgabe von xargs beträgt ~ 4096 Zeichen, kann jedoch mit z. xargs -s 8192.

grepxargs

52
bluebadge

Entfernen Sie im Bash-Echo ohne Anführungszeichen Zeilenumbrüche, Tabulatoren und mehrere Leerzeichen

echo $(cat file)
45
user1699917

Das könnte sein, was Sie wollen

cat file | grep pattern | paste -sd' '

Was deine Bearbeitung angeht, bin ich mir nicht sicher, was es bedeutet, vielleicht das?

cat file | grep pattern | paste -sd'~' | sed -e 's/~/" "/g'

(Dies setzt voraus, dass ~ kommt in file nicht vor)

17
sehe

Dies ist ein Beispiel, bei dem die Ausgabe durch Kommas getrennt wird. Sie können das Komma durch das gewünschte Trennzeichen ersetzen.

cat <<EOD | xargs | sed 's/ /,/g'
> 1
> 2
> 3
> 4
> 5
> EOD

produziert:

1,2,3,4,5
2
Richard Gomes

Hier ist die Methode mit ex editor (Teil von Vim ):

  • [~ # ~] j [~ # ~] in allen Zeilen und p rint auf die Standardausgabe:

    $ ex +%j +%p -scq! file
    
  • [~ # ~] j [~ # ~] in alle vorhandenen Zeilen (in der Datei):

    $ ex +%j -scwq file
    

    Hinweis: Dadurch werden alle Zeilen in der Datei selbst verkettet!

1
kenorb

Der wahrscheinlich beste Weg, dies zu tun, ist die Verwendung des 'awk'-Tools, das die Ausgabe in einer Zeile generiert

$ awk ' /pattern/ {print}' ORS=' ' /path/to/file

Es werden alle Zeilen mit einem Leerzeichen getrennt

0