Beim Verwenden von sed in einer Schleife tritt der Fehler auf - sed: keine Eingabedateien

Beim Verwenden von sed in einer Schleife tritt der Fehler auf - sed: keine Eingabedateien

Ich verwende es sedinnerhalb einer While-Schleife, um die nachstehenden Leerzeichen aus einer Datei zu entfernen, die eine Liste von Dateien enthält. Die Leerzeichen werden entfernt. Aber ich erhalte die Meldung sed:no input files.

Folgendes ist die While-Schleife, die ich verwende:

while IFS= read -r line; 
        do
            echo "tester: $line"
            sed -i 's/\s*$//' $line ;
        done < file_list.txt

Antwort1

Wie Ipor und Glenn beide gesagt haben, basierend auf Ihrem Bericht aus dem Kommentar von B Layer bezüglich tail -1 file_list.txt, wird der Variablen ein leerer Wert zugewiesen, da sich am Ende dieser Datei eine leere Zeile befindet, wenn die whileSchleife diese leere Zeile liest, und es bleibt kein zu verarbeitender $lineDateiname übrig .sed

$ cat i
file1
file2

$ while IFS= read -r line; do printf -- "-->%s<--\n" "$line"; done < i
-->file1<--
-->file2<--
--><--

Die Lösung besteht hier darin, die nachstehende leere Zeile aus file_list.txt zu löschen oder Ihre tatsächliche Verarbeitung mit einem Test zu umgeben, um die Existenz der Datei zu prüfen:

# do ...
if [ -f "$line" ]
then
  # process file
fi
# done ...

UndGeben Sie Ihre Variablen immer in Anführungszeichen an!

Antwort2

Hatte das gleiche Problem, bei mir lag es daran, dass ich die Eingabedatei nicht an sed CMD übergeben habe

Beispiel:

boy=$1
boy2=$2
boy3=$3
while IFS="," read -r col1 col2
do
 if [ "$col1" == "oke" ]; then

    sed -i "s/$col2/$boy/g" test.txt
  fi
done < test.txt

verwandte Informationen