#perl
Вопрос:
У меня есть файл, содержащий следующие строки:
...
# Check the date
date
...
Я хочу прокомментировать date
команду. Но это происходит несколько раз в файле , и я хочу прокомментировать date
то, что находится через одну строку после # Check the date
, в противном случае я бы просто использовал:
perl -i -pe 's:(.*date.*):#$1:' file
Как я могу улучшить свою логику и комментировать только date
сразу после # Check the date
комментария?
Ответ №1:
Помните, была ли предыдущая строка комментарием в переменной:
perl -pe 's/^(date)$/#$1/ if $prev; $prev = /^# Check the date$/;'
Комментарии:
1. Нит: Я думаю , что вы изначально намеревались назначить «предыдущую» строку
$prev
, но передумали. Таким образом,$fix
получается лучшее имя переменной.
Ответ №2:
Честно говоря, я бы не стал использовать perl
для этого редактирование на месте, я бы обратился к старому доброму ed
:
printf '%sn' '/^# Check the date/ 1s/^/# /' w | ed -s file
добавит a #
в начало строки, следующей за первой строкой, которая соответствует регулярному выражению ^# Check the date
, и сохранит изменение.
printf '%sn' '/^# Check the date/ 1g/^date$/s/^/# /' w | ed -s file
будет делать то же самое, только если следующая строка date
.