J'ai essayé de remplacer un chemin d'accès à l'intérieur d'un fichier YML à l'aide de commandes SED et a également essayé de commenter l'ancien chemin dans ce fichier. Le commentaire fonctionne bien mais pas spécifiquement pour ce chemin. Il y a aussi d'autres chemins dans ce fichier aussi. mon fichier YML ressemble à: maintenant je veux que mon fichier ressemble à p> Veuillez noter que le fichier YML a quatre espaces et puis un "-" avant le chemin p> mais cela ne semble pas fonctionner, une autre chose qui a été essayée est p> Cela fonctionne bien, mais il ajoute un commentaire sur chaque chemin qui commence par S'il vous plaît laissez-moi savoir si je voudrais remplacer la date du dossier avec la date d'hier, car je souhaite exécuter le script Après un jour de la création de dossier. p> p> / home code> et fait également écho au chemin à la fin du fichier. Par conséquent, je dois utiliser quelque chose avec SED car je veux remplacer le chemin avec la date actuelle. P>
3 Réponses :
Il y a quelques problèmes que je vois:
L'expression régulière c'est: il supprimera tout Ceci est probablement pas em> ce que vous voulez. p> Ceci est probablement pas em> ce que vous voulez. si vous voulez (mais bien sûr, vous rencontrez des problèmes car la valeur étendue de Pour simplement remplacer le répertoire actuel, utilisez quelque chose comme: p> ceci utilise le tuyau si vous souhaitez conserver le chemin d'origine et le commenter, utilisez P> / home / s / ^ # * / # / effectuera un remplacement sur toutes les lignes contenant
home code> (cool), mais il remplacera tout nombre de
# code> au début de la ligne avec un seul
# code>. p>
# code> au début de chaque ligne, puis ajoutez un nouveau à chaque ligne (comme
^ # * code> correspondra à zéro hachage de tête aussi). p>
Sing-Cutations empêchera la expansion des variables h3>
sed -e '/ $ spth / s / s / ^ # * / # / # / code> effectuera la substitution sur toutes les lignes contenant le littéral
$ sp Code> (Indépendamment de la variable de coquille
SPTH CODE> et de ce que c'est le contenu du contenu). p>
$ SPTH code> pour être développé, vous avez besoin de guillemets (
" code>)
$ spth code> contient des barres obliques, interférant avec l'expression sed elle-même). p> solution . h1>
| code> comme caractère de délimitation , pour éviter les problèmes avec la barre oblique dans
$ {SPTH} code>.
Il capture l'indentation, le tiret et le début du fichier (jusqu'à la fin de
$ {SPTH} code>) dans le groupe de capture
\ 1 code>, qui est ensuite utilisé dans le Remplacement, le texte de remplacement a donc la même empreinte que l'original (espérons-le en garder votre YAML intact) p>
sed \
-e "s|^\(\( *- *${SPTH}\)/.*/\*_\*_\*\)$|#\1\n\2/$(date +%Y%m%d)/*_*_*|" \
-i test.yml
Vous pouvez utiliser & code> dans le remplacement au lieu d'un groupe de capture supplémentaire pour toute la ligne.
L'utilisation d'outils de traitement de texte simples pour YAML ne fonctionnera pas toujours correctement. Une telle solution peut être acceptable si vous savez que votre entrée YAML aura toujours un certain format.
supposant que vous souhaitez remplacer avec p> Vous pouvez utiliser p> avec votre exemple entrée Ceci imprime p> date -d yesterday +%Y%m%d
Vous pouvez essayer: sortie: p> Utilisez SED avec option -i pour enregistrer la sortie p> < / p>
Merci pour cela. Je suis presque là-bas. Pouvez-vous s'il vous plaît dites-moi si je veux changer la date à hier dans le même script, comment est-ce possible? Comme je vais exécuter le script après un jour de création de ce dossier de date
Je l'ai atteint par moi-même merci. J'ai fait date -d "hier" +% y% m% d hier = $ (date -d "hier" +% y% m% d) code>
Les outils YAML doivent être analysés avec un analyseur de syntaxe, comme
YQ code>. Pouvez-vous installer un tel outil? - Mikefarah.gitbook.io/yq
Je n'ai pas essayé d'installer que j'essayais de le remplacer directement à l'aide de SED sans analyser