Perl поиск и замена

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

Мне нужно иметь возможность менять "все на нет" и / или "нет на всех" без необходимости делать это каждый раз вручную для сотен строк.

ниже приведен пример текстового файла с номерами строк справа. Я знаю, как открыть и закрыть файл для записи уже.

линии

1 define_filter absolute_minimal_filter ------- все
2 define_filter atma_basic_filter -------- ----- нет
3 define_filter atma_communication_filter - все
4 define_filter atma_health_filter ------------- нет
5 define_filter atma_misc_filter --------------- все
6 define_filter atma_performance_filter ---- нет
7 define_filter atma_supplemental_filter ---- нет

2 ответа

Решение

С правильно выбранной строкой вместо "temp" (в двух местах):

sed 's/all/temp/g;s/none/all/g; s/temp/none/g' input_file > output_file

или без строки temp, если "all" и "none" никогда не появляются в одной строке и всегда заканчивают строку:

sed 's/all$/none/;t;s/none$/all/' input_file > output_file

Интересно, что решение Perl очень похоже на sed:

perl -pi.bak -e 's/all$/none/ || s/none$/all/' input_file

РЕДАКТИРОВАТЬ: я пропустил "||" первый раз. Как отдельные заявления, второе отменит первое. D'о!

Другие вопросы по тегам