0 votes

Utilisation de sed pour remplacer une ligne entraîne deux lignes pour chaque remplacement effectué

J'ai essayé d'automatiser quelque chose, en utilisant sed dans une boucle, je voulais faire ceci :

while IFS= read -r line; do
  sed -r -i '' "\"s|::set-output name=(.*)::(.*)\"|\"\1=\2\" >> \$GITHUB_OUTPUT|p" "$line"
done < <(grep -RIl "::set-output" | sort -u)

Cela devrait alimenter une liste de fichiers renvoyés par grep qui correspondent au motif à sed, qui devrait remplacer chaque ligne par une ligne similaire correspondant au nouveau format que je souhaite.

Cela semble fonctionner correctement, mais cela provoque certains résultats non souhaités que je ne peux expliquer, à chaque fois qu'il remplace une ligne, cela entraîne deux nouvelles lignes. Je ne sais pas quel comportement provoque cela et mes premières recherches autour du sujet n'ont pas donné beaucoup d'informations utiles, je ne sais pas quoi chercher.

Pour reproduire le problème, j'ai set -x, exécuté ma boucle et ai pris l'une des lignes de la sortie de débogage. J'ai réinitialisé mon dépôt par défaut avec git stash et ai fait :

$ sed -r -i '' 's|"::set-output name=(.*)::(.*)"|"\1=\2" >> $GITHUB_OUTPUT|p' ./.github/workflows/platform-status.yml

Maintenant je peux voir dans le git diff qu'il a remplacé ma vieille ligne par deux lignes identiques :

-          echo "::set-output name=version::${VERSION}"
+          echo "version=${VERSION}" >> $GITHUB_OUTPUT
+          echo "version=${VERSION}" >> $GITHUB_OUTPUT

Je ne comprends pas d'où vient la deuxième ligne et je ne m'attendrais pas à ce comportement de sed, quelqu'un peut-il me dire ce que je fais de mal ?

1voto

Kristof Claes Points 5867

J'ai trouvé un post sur Stack Overflow, qui suggérait d'utiliser perl à la place :

sed -r -i ''

devient

perl -pi -e

Et cela fonctionne exactement comme je m'y attendais

LesApples.com

LesApples est une communauté de Apple où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres utilisateurs d'appareils Apple, poser vos propres questions ou résoudre celles des autres.

Powered by:

X