How to replace the nth occurrence of a string using sed

First replace all the newlines with a unique character that does not occur anywhere else in your file (e.g. ^) using tr. You need to do this in order to create a single string for sed. Then pass it to sed and tell it to replace the nth occurrence of your string. Finally, pass the output back through tr to recreate the newlines.

For n=2, the command is:

$ tr '\n' '^' < file | sed 's/jack/jill/2' | tr '^' '\n'
first line
second line
third line
fifth line
seventh line


It can also be done with sed, WITHOUT changing the newlines first, using the following command:

$ sed ':a;N;$!ba;s/jack/jill/2' file

Alternatively, use awk:

$ awk '/jack/{c+=1}{if(c==2){sub("jack","jill",$0)};print}' file

Leave a Comment