Was ist besser zwischen einer For-Schleife und einer While-Schleife für die Korn-Shell

Was ist besser zwischen einer For-Schleife und einer While-Schleife für die Korn-Shell

Ich habe eine Datei file_list.txt, die eine Liste der zu verarbeitenden Dateinamen enthält. Und für alle in file_list.txt vorhandenen Dateien muss ich die nachstehenden Leerzeichen und zusätzlichen Zeilenumbruchzeichen entfernen. Wie kann ich das erreichen? Ist eine While-Schleife oder eine For-Schleife besser?

Antwort1

Wenn es um die Bearbeitung des Inhalts der geht file_list.txt,Sie würden ein Textbearbeitungstool verwenden, keine Shell-Schleife, wie:

sed 's/[[:space:]]*$//; # remove trailing whitespace
     /./!d; # remove empty lines' < file_list.txt > new_file_list.txt

Oder für die Bearbeitung direkt vor Ort:

perl -nli.back -e 's/\s+$//;print if /./' file_list.txt

(entfernen .back, wenn Sie keine Sicherungskopien des Originals benötigen).

Wenn file_list.txtes eine Liste von Dateien enthält und Sie den Inhalt dieser Dateien bearbeiten möchten, ist eine Schleife wiederum nicht ideal, es sei denn, Sie möchten einen Bearbeitungsbefehl pro Datei ausführen.

Wenn der Inhalt mit dem Eingabeformat file_list.txtkompatibel ist , d. h. wenn Dateinamen durch Leerzeichen (einschließlich Zeilenumbrüche) getrennt sind und doppelte Anführungszeichen, einfache Anführungszeichen oder Backslashs Leerzeichen und einander maskieren können (wobei jedes Zeichen zulässig ist), können Sie einfach Folgendes tun:xargs

xargs < file_list.txt perl -nli.back -e 's/\s+$//;print if /./' --

verwandte Informationen