Dans un script bash, j'essaie d'appeler la commande Perl suivante sur chaque fichier, puis je souhaite rediriger la sortie de la commande Perl vers ce fichier.
La commande Perl supprime simplement les commentaires du fichier . Quand il imprime sur la console, cela semble fonctionner. Mais lorsque j'essaie de rediriger la sortie vers chaque fichier individuel, le fichier devient vide. Qu'est-ce que je fais mal ici ?
#!/usr/bin/env bash
shopt -s globstar
for file in ./**/*.java; do
perl -0pe 's|//.*?\n|\n|g; s#/\*(.|\n)*?\*/##g; s/\n\n+/\n\n/g' "$file" > "$file";
done
Vous essayez de lire à partir d'un fichier et essayez de rediriger la sortie vers le même fichier. Cela ne fonctionne pas. Shell ouvre d'abord le fichier pour l'écriture, maintenant lorsque Perl essaie de lire le fichier, il n'y a rien de présent, et donc aucune sortie.
Vous pouvez utiliser l' -i
option de Perl pour effectuer une édition sur place.
perl -i.bak -0pe 's|//.*?\n|\n|g; s#/\*(.|\n)*?\*/##g; s/\n\n+/\n\n/g' "$file"
Cela modifiera le fichier directement et aura également la copie originale du fichier avec une extension .bak. Si vous n'avez besoin d'aucune sauvegarde, utilisez simplement -i
à la place de-i.bak
Cet article est collecté sur Internet, veuillez indiquer la source lors de la réimpression.
En cas d'infraction, veuillez [email protected] Supprimer.
laisse moi dire quelques mots