[ Всегда приятно видеть, как кто-то проверял FAQ! Как изменить, удалить или вставить строку в файл или добавить в начало файла? . ]
Вот как бы я это сделал:
% perl -ni -e 'print; print "Inserted\n" if (/time/ && ++$c) == 3' input.txt
Переменная счетчика $c
увеличивается на значение, возвращаемое оператором сопоставления. Это 0, если он не совпадает, и 1, если он совпадает (он используется в скалярном контексте, поэтому даже при /g
он совпадает только один раз). После этого обновления до $c
оно сравнивается с требуемым значением.
Вот input.txt :
First time
Second time
Third time
Fourth time
И результат:
First time
Second time
Third time
Inserted
Fourth time
Также вы можете сделать это немного короче с -p
, который автоматически ставит print
в конце. В этом случае вы заканчиваете тем, что вставляете строку до следующей строки вместо после предыдущей строки (и это может быть проблемой, если у вас недостаточно строк, чтобы прийти перед чем-то ):
% perl -pi -e 'print "Inserted\n" if (/time/ && ++$c) == 4' input.txt
И вы можете рассмотреть возможность обновления до v5.28, если вы его еще не используете. Редактирование на месте становится немного безопаснее , если сначала записать во временный файл, а затем заменить исходный файл после успешного завершения программы.