-1
votes

sed: remplacer les caractères avant '-'

J'ai un fichier texte comme si: xxx

Je souhaite remplacer le caractère avant - avec * . La sortie attendue devrait donc être xxx

Comment ferais-je cela à l'aide de SED?
J'ai essayé d'utiliser S / [AZ] * - / * / g mais il ne fonctionne pas et ne remplace pas avant et y compris le - avec un seul *

Comment puis-je résoudre ce problème?

sed

0 commentaires

5 Réponses :


2
votes

Implémentez une boucle à l'aide d'étiquettes et de ramification:

$ sed ':1; s/^\(\**\)[a-z]/\1*/; t1' <<EOF
every-    100
atmo-   220
EOF
*****-    100
****-   220


0 commentaires

1
votes

avec perl: xxx

sortie: xxx


dérivé de https://stackoverflow.com/a/57458869/3776858


0 commentaires

1
votes

avec gnu awk. Utilisez - code> en tant que séparateur de champ d'entrée et de sortie et remplacez-le dans la première colonne tout avec * code>. xxx pré>

sortie: p>

*****-    100
****-   220


2 commentaires

IMHO Ceci ne vérifie pas uniquement la substitution des alphabets, il substituera tout entier ou caractère avant - .


Si cela ne vous dérangeait pas que je n'ai pas pris inspiration de votre solution et ajouté 1 dans le mien avec de légères modifications s'il vous plaît.



0
votes

Une autre façon de le coder dans sed : xxx

et un autre codage à Perl: xxx


0 commentaires

-1
votes

Ceci pourrait fonctionner pour vous (GNU SED):

sed ':a;s/^\(\**\)[^-*]/\1*/;ta' file
  • Remplacez le - code> par une nouvelle ligne. li>
  • Copiez la ligne. LI>
  • Remplacez tout sauf la nouvelle ligne par * code>'s. li>
  • Ajoute la copie. LI>
  • Remplacez tout entre les nouvelles lignes par un seul - code>. li> ul>

    une alternative, en utilisant une boucle: p> xxx pré> p>


0 commentaires