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.txt
es 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.txt
kompatibel 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 /./' --