[FIXED] Wie kann ich mit einer Schleife Zeilen aus .txt-Dateien entfernen?

Ausgabe

In meinem aktuellen Verzeichnis habe ich ein paar .txt-Dateien. Ich möchte ein Skript schreiben, um in diesen .txt-Dateien nach einer Zeichenfolge zu suchen und Zeilen zu löschen, die diese Zeichenfolge enthalten. Zum Beispiel möchte ich alle Zeilen löschen, die das Wort “start” in allen .txt-Dateien in meinem aktuellen Verzeichnis enthalten.

Ich habe den folgenden Code geschrieben, aber ich weiß nicht, wie ich fortfahren soll!

#!bin\bash
files=`find . -maxdepth 1 -name \*.txt`

Wie soll ich “while” verwenden, um durch jede Datei zu gehen?

Lösung

Verwenden Sie Globs, um Schleifenvariablen zu füllen

Wenn Sie -maxdepth 1das aktuelle Verzeichnis verwenden, wechseln Sie nicht in Unterverzeichnisse. Wenn dies der Fall ist, besteht überhaupt keine Notwendigkeit, find zu verwenden, nur um Dateien mit einer Erweiterung abzugleichen. Sie können stattdessen Shell-Globs verwenden, um Ihre Schleifenkonstrukte zu füllen. Zum Beispiel:

#!/bin/bash

# Run sed on each file to delete the line.
for file in *txt; do
    sed -i '/text to match/d' "$file"
done

Dies ist einfach und vermeidet eine Reihe von Problemen im Zusammenhang mit Dateinamen, die beim Übergeben von Dateinamenargumenten zwischen Prozessen auftreten können. Halte es einfach!


Beantwortet von –
Todd A. Jacobs


Antwort geprüft von –
David Marino (FixError Volunteer)

0 Shares:
Leave a Reply

Your email address will not be published. Required fields are marked *

You May Also Like