Назад | Перейти на главную страницу

Поиск и замена 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 ---- нет

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

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

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

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

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

или без временной строки, если «все» и «нет» никогда не появляются в одной строке и всегда заканчивают строку:

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