Заменить N-е совпадение строк в файле - PullRequest
0 голосов
/ 12 октября 2018

Итак, я нашел много решений для использования sed s/regexFind/replacement/n для замены n-го вхождения слова в строке.

Например, s/hello hello hello/world/2> hello world hello

Однако я хочу обновить обновление третьего совпадения совпадения над файлом.

Hello
Hello
Hello
Hello
Hello

В основном ожидалось, что sed -i s/Hello/world/2 $filename заменит содержимое файла следующим образом:

Hello
World
Hello
Hello
Hello

Однако это не так.Любые предложения?

Я не использую решение для чтения каждой строки в стиле Python, поскольку файл, в котором я ищу замену подстрок, не является UTF-8.

Ответы [ 2 ]

0 голосов
/ 19 октября 2018

Решение

Это решение работает на Solaris 5.11

Perl perl-pe 's{Hello}{++$n == 2 ? $& : "World"}ge\' script > tmp && mv tmp script

Примечание:Это меняет права доступа к файлу скрипта.Скорее всего, вам потребуется обновить разрешения, используя следующую команду:

chmod 777 script

Для получения дополнительной информации о правах доступа к файлам просмотрите документацию

0 голосов
/ 12 октября 2018

Вот один в GNU awk:

$ awk 'BEGIN{RS=/^$/;ORS=""}$0=gensub(/Hello/,"World",2)' file 
Hello
World
Hello
Hello
Hello

Он обрабатывает весь файл как одну запись, а gensub заменяет второе совпадение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...