Как я могу сделать этот Perl однострочным для переключения символов в строке в файле? - PullRequest
0 голосов
/ 30 ноября 2008

Я пытаюсь написать однострочный сценарий Perl, который переключит строку в файле конфигурации с «закомментированного» на not и обратно. Пока у меня есть следующее:

perl -pi -e 's/^(#?)(\tDefaultServerLayout)/ ... /e' xorg.conf

Я пытаюсь выяснить, какой код поместить в раздел замены (...). Я хотел бы, чтобы замена вставляла знак «#», если он не был найден, и удаляла его, если он соответствовал.

псевдокод:

if ( $1 == '#' ) then
   print $2
else
   print "#$2"

Мой Perl очень ржавый, и я не знаю, как вписать это в s///e замену.

Моя причина для этого - создать один скрипт, который будет изменять (переключать) мои настройки отображения между двумя макетами. Я бы предпочел, чтобы это было сделано только в одном сценарии.

Я открыт для предложений по альтернативным методам, но я бы хотел оставить это в виде однострочного текста, который я могу просто включить в сценарий оболочки, который выполняет другие вещи, которые я хочу выполнить при изменении макетов.

1 Ответ

12 голосов
/ 30 ноября 2008
perl -pi -e 's/^(#?)(?=\tDefaultServerLayout)/ ! $1 && "#" /e' foo

Обратите внимание на добавление? =, Чтобы упростить строку замены с помощью прогнозного утверждения .

Кто-то может предпочесть s /.../ $ 1? "": "#" /e.

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