Ответ 1
Сначала замените все символы новой строки уникальным символом, который не встречается нигде в вашем файле (например, ^
), используя tr
. Вам нужно сделать это, чтобы создать одну строку для sed
. Затем передайте его sed
и скажите ему заменить n-е вхождение вашей строки. Наконец, передайте результат обратно через tr
, чтобы воссоздать новые строки.
При n = 2 команда:
$ tr '\n' '^' < file | sed 's/jack/jill/2' | tr '^' '\n'
first line
second line
third line
jack
fifth line
jill
seventh line
Update:
Это также можно сделать с помощью sed
, не меняя сначала новые строки, используя следующую команду:
$ sed ':a;N;$!ba;s/jack/jill/2' file
В качестве альтернативы используйте awk
:
$ awk '/jack/{c+=1}{if(c==2){sub("jack","jill",$0)};print}' file