In meinem Verzeichnis gibt es einige HTML-Dateien enthält eine solche Zeichenfolge:
Linux-Shell: sed regex arbeiten mit speziellen Zeichen
sceneFilePath: "./video/video/960.mp4",
Was ich tun muss, ist den Weg über den richtigen Weg zu ersetzen. Also schreibe ich ein Skript, das zu tun:
find ./video -type f -name "*.mp4" -print0 | while IFS= read -r -d '' myfile; do
tmp=$(basename "$myfile") #example.mp4
tmp="${tmp/.mp4/.html}"
# Here I create a file named $tmp according to a template with the command `cp`
cp -rf index.html "$tmp"
sed -i '' "s#sceneFilePath:.*,#sceneFilePath: \"${myfile}\",#g" "$tmp"
done
Aber es funktioniert nicht. Hier
ist ein Beispiel für $myfile
:
./video/Bentota & Hikkaduwa/Hotels/River House/River House - Balapitiya.mp4
Es scheint, dass es wegen der $myfile
ist, die einige Sonderzeichen enthält, wie ,
&
, -
, oder dass es ist, weil die .*
kann nicht übereinstimmen ./video/video/960.mp4
.
sed -i '' "s#sceneFilePath:.*#sceneFilePath: \"${myfile//&/\\&}\",#" "$tmp"
Dieses jedes Vorkommen entweicht von &
so dass &
verliert es eine besondere Bedeutung in Ersatz:
Hat Ihr Dateiname die Endung '.mp4' oder' .html'? – anubhava
@anubhava oh ich habe einen Fehler gemacht. Ich werde die Frage aktualisieren. – Yves
@anubhava Ich verstehe deine Frage nicht. 'sed' arbeitet an der kopierten HTML-Datei. – Yves