2011-07-05 11 views
0


il est possible de changer N (par exemple deuxième occurrence) dans le fichier avec sed/awk d'une ligne, sauf cette méthode ?:
sed/awk: remplacer N occurrence

line_num=`awk '/WHAT_TO_CHANGE/ {c++; if (c>=2) {c=NR;exit}}END {print c}' INPUT_FILE` && sed "$line_num,$ s/WHAT_TO_CHANGE/REPLACE_TO/g" INPUT_FILE > OUTPUT_FILE 


Merci

Répondre

7

Pour changer l'occurence Nième en ligne vous pouvez utiliser ceci:

$ echo foo bar foo bar foo bar foo bar | sed 's/foo/FOO/2' 
foo bar FOO bar foo bar foo bar 

tout ce que vous avez donc à faire est de créer un "one-liner" de votre texte, par exemple en utilisant tr

tr '\n' ';' 

faire votre remplacement, puis reconvertir à un multiligne en utilisant à nouveau

tr ';' '\n' 
+0

Merci, bonne affaire avec TR - parce que sans cela « s/foo/FOO/2 'ne fonctionne pas pour moi – Vitaliy

1

Cette solution awk suppose que WHAT_TO_CHANGE ne se produit qu'une fois par ligne. Le paragraphe suivant remplace le deuxième « un » avec « deux »:

awk -v n=2 '/one/ { if (++count == n) sub(/one/, "TWO"); } 1' file.txt 
+0

Merci, cela fonctionne aussi bien – Vitaliy

Questions connexes