Как мне найти два последовательных символа новой строки (\ n), используя perl? Или, более конкретно, почему поиск \ n \ n не успешен, даже если он существует? У меня есть файл с последовательными символами новой строки (проверенный с помощью шестнадцатеричного редактора, они не возвращаются и т. Д.), Но Perl, похоже, не принимает это регулярное выражение.
perl -pi -e 's / \ n \ n / TEST / g' myfile.xml
= нет результатов
На самом деле я пытаюсь вставить немного кода в XML-файлы, но перевод строки находится посередине, какой самый элегантный способ сделать это? Я придумал чудовищный perl one liner, но двухсторонние переводы, кажется, вызывают сбой.
Я хочу изменить часть файла gtkrc с:
GtkWidget::link-color = @link_color
GtkWidget::visited-link-color = @text_color
####################
# Color Definitions
####################
до:
GtkWidget::link-color = @link_color
GtkWidget::visited-link-color = @text_color
GtkWindow::resize-grip-height = 0
GtkWindow::resize-grip-width = 0
####################
# Color Definitions
####################
Используя часть исходного кода в качестве поискового запроса (кстати, перед каждой строкой в исходном скрипте есть вкладки), мои термины поиска и замены были следующими:
color\n\n\t\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\n\t\# Color
color\n\n\tGtkWindow::resize-grip-height = 0\n\tGtkWindow::resize-grip-width = 0\n\n\t\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\n\t\# Color
Я придумал эту большую уродливую команду perl:
perl -pi -e 's/color\n\n\t\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\n\t\# Color/color\n\n\tGtkWindow::resize-grip-height = 0\n\tGtkWindow::resize-grip-width = 0\n\n\t\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\n\t\# Color/g' /usr/share/themes/Ambiance/gtk-2.0/gtkrc
РЕДАКТИРОВАТЬ: Исправленный код от Zaid:
perl -0777 -pi -e 's/color\n\n\t\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\n\t\# Color/color\n\n\tGtkWindow::resize-grip-height = 0\n\tGtkWindow::resize-grip-width = 0\n\n\t\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\n\t\# Color/g' /usr/share/themes/Ambiance/gtk-2.0/gtkrc
Как уже упоминалось, похоже, \ n \ n вызывает проблемы, поскольку все остальное можно заменить. Какой лучший способ сделать это?
Я нахожусь на Ubuntu 11.10, команда будет запускаться из сценария оболочки, а не из сценария perl.