2017-02-08 9 views

Antwort

5

Verwendung prozess Substitution in bash, zu vermeiden useless-use-of-cat

> file 
while IFS= read -r line 
do 
    printf "%s\n" "$line" 
done </dev/stdin>> file 

Um Form stdin und hängt an die file auf der Flucht zu lesen, kürzt > file den Inhalt der Datei, bevor Sie beginnt zu lesen.

Einschließlich dieser Vorschlag von Leon's comment für eine Option einzeilige, dies zu tun,

while IFS= read -r line; do echo "$line"; done > file 
+1

Das gleiche kann wie folgt geschrieben werden: 'while read -r line; echo "$ line"; done> file' – Leon

+1

Beachten Sie, dass diese Lösung anders als "cat" ist - wenn die Eingabe nicht mit einem Newline-Zeichen endet, wird die letzte Zeile gelöscht – Leon

+1

Fügen Sie ein 'IFS =' zum 'read' hinzu um zu vermeiden, dass führende und nachfolgende Leerzeichen aus '$ line' entfernt werden. –

2

nur bash-Tools zu verwenden, können Sie tun:

printf '%s' "$(< infile)" 

Aber beides:

  • Ich glaube nicht, dass für kleine Dateien viel schneller sein.
  • Es wird die gesamte Datei im Speicher sammeln, die für lange Dateien ziemlich schlecht ist.

Deshalb ist Katze als Werkzeug vorhanden.

Verwandte Themen