GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Wie kann man die Zeilen einer Datei durchlaufen?

Angenommen, ich habe diese Datei:

hello
world
hello world

Dieses Programm

#!/bin/bash

for i in $(cat $1); do
    echo "tester: $i"
done

Ausgänge

tester: hello
tester: world
tester: hello
tester: world

Ich hätte gerne den for durchlaufen Sie jede Zeile einzeln und ignorieren Sie dabei Leerzeichen, d.h. die letzten beiden Zeilen sollten durch

ersetzt werden
tester: hello world

Verwendung von Anführungszeichen for i in "$(cat $1)"; ergibt i die gesamte Datei auf einmal zugewiesen wird. Was soll ich ändern?

Akzeptierte Antwort:

(9 Jahre später:)
Beide Antworten würden bei Dateien ohne Zeilenumbruch am Ende fehlschlagen, dies würde effektiv die letzte Zeile überspringen, keine Fehler erzeugen, würde zu einer Katastrophe führen (auf die harte Tour gelernt:).

Die beste prägnante Lösung, die ich bisher gefunden habe, die „einfach funktioniert“ (sowohl in bash als auch in sh):

while IFS='' read -r LINE || [ -n "${LINE}" ]; do
    echo "processing line: ${LINE}"
done < /path/to/input/file.txt

Eine ausführlichere Diskussion finden Sie in dieser StackOverflow-Diskussion:How to use „while read“ (Bash) to read the last line in a file if there’s no newline at the end of the file?

Achtung:Dieser Ansatz fügt der letzten Zeile einen zusätzlichen Zeilenumbruch hinzu, falls noch keiner vorhanden ist.


Linux
  1. So zeigen Sie bestimmte Zeilen einer Datei in der Linux-Befehlszeile an

  2. Wie man Zeilen in einer Datei in UNIX/Linux zählt

  3. So verwenden Sie sed, um die letzten n Zeilen einer Datei zu entfernen

  4. Wie kann ich dem Anfang jeder Zeile in einer Datei eine Zeichenfolge voranstellen?

  5. Wie man nur die Anzahl der Zeilen einer Datei erhält

So extrahieren Sie die tar.gz-Datei in Linux mithilfe der Befehlszeile

So entfernen Sie Zeilen aus einer Datei mit dem Sed-Befehl

So finden Sie die längste(n) Zeile(n) in einer Datei in Linux

Wie lösche ich den Inhalt einer Datei über die Befehlszeile?

Wie erhalte ich die URL der Dropbox-Datei von der Befehlszeile?

Linux - grep von bestimmten Zeilen bis zum Ende der Datei