Ich verwende es sed
innerhalb 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 while
Schleife diese leere Zeile liest, und es bleibt kein zu verarbeitender $line
Dateiname ü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 ...
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