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.
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"
Entfernen Sie im Bash-Echo ohne Anführungszeichen Zeilenumbrüche, Tabulatoren und mehrere Leerzeichen
echo $(cat file)
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)
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
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