-1
votes

Voulez-vous remplacer un mot correspondant avec une valeur variable incrémentale

Je veux que SED remplace le motif correspondant dans l'ensemble du fichier avec une valeur incrémentielle. Pour par exemple, le modèle de correspondance est Den et je veux que toutes les instances de DEN dans le fichier soient remplacées par une nouvelle ligne et des numéros incrémentiels. Ce que j'ai essayé et échoué est:

a=1
while read in; do a=$((a+1)) && sed ""$in"s/den/ten\n"$a"/"; done <<< "$(grep 'den' -o -n file | cut -f1 -d ':')"


1 commentaires

Je ne comprends pas, pourriez-vous reformater votre message pour poster de manière proprement la sortie attendue et l'entrée dans des blocs de code avec \ n remplacé par une nouvelle ligne réelle? Quelle est l'entrée? Que devrait être la sortie? Comment «la sortie attendue» générée? Quelle est l'entrée?


3 Réponses :


0
votes

code suivant: xxx

sorties: xxx


0 commentaires

2
votes

Utiliser grep code> pour produire des numéros de ligne pour SED code> est décidément un anticipation - SED code> peut certainement trouver les correspondances de regex à sien. Mais ce problème semble plus approprié pour AWK.

awk '{ while(/den/ && sub("den", "ten\n" ++a));; print }' file


5 commentaires

Notez que la variable sera incrémentée même si une ligne ne correspond pas à den ... perl -pe 's / den / "TEN \ N". ++ $ c / ge ' corrigerait ça


ou awk '{alors que (/ den / && sub ("den", "dix \ n" ++ a)) ;; imprimer} '


N'y a-t-il pas une solution à base de SED pure sans awk


Pourquoi pensez-vous qu'il devrait y avoir? sed n'a pas de variables intégrées ni de support en mathématiques; Vous devrez dépendre de l'utilité externe de toute façon.


Une solution SED sans awk pourrait être quelque chose comme pour ((i = 1; fichier grep -q dix; i ++)) do Sed_replacing_one_octiver_with_ $ i; fait mais ce serait une solution terrible.



1
votes

Utilisez "DEN" comme séparateur d'enregistrement et augmentation d'enregistrement comme incrément:

awk 'BEGIN {RS="den"; ORS=""} NR>1 {printf "ten\n" NR-1} 1' file


0 commentaires