Linux sed kann die Datei nicht lesen, die genau dort ist

2
grep -r -l --include=*.{html,js,css} "\bAA\b" . | xargs -0 -n 1 sed -i -e "s/\bAA\b/BB/g"

Als ich den obigen Befehl ausführte, wurde folgende Fehlermeldung angezeigt:

sed: can't read ./login.html : No such file or directory

Das ist ziemlich seltsam, wie ich es kann vi ./login.html

Ich verstehe nicht, warum ich diesen Fehler erhalte. Bitte helfen Sie. Vielen Dank.

Tamakisquare
quelle

Antworten:

1

Sie sollten nicht mit seinem -0mit xargs , wenn der vorherige Befehl NUL tatsächlich nutzt seinen Ausgang zu begrenzen, die grepnicht , es sei denn Sie verwenden -Z. Daher wird nach "./login.html" und nicht nach "./login.html" gesucht (Leerzeichen beachten).

Ignacio Vazquez-Abrams
quelle
Vielen Dank. Das Löschen von -0 funktioniert! Aber ich bin neugierig, ob es eine flexiblere Möglichkeit ist, den -z-Ansatz zu verwenden (damit ich in meinem regulären Ausdruck mit dem Zeilenumbruchzeichen übereinstimmen kann).
Tamakisquare
1
Richtig. Ohne sie xargswird eine neue Zeile in einem Dateinamen sollten Sie stattdessen ein Argument Separator sein.
Ignacio Vazquez-Abrams