如何使用perl搜索两个顺序换行符(\ n)?或者更具体地说,为什么即使它们存在,搜索也不成功?我有一个连续换行符的文件(使用十六进制编辑器来完成,它们不是返回值等),但是perl似乎并不接受这个正则表达式。如何使用perl搜索两个连续换行符( n)?
的perl -pi -e 'S/\ n \ n /测试/ G' 将myfile.xml =没有结果
实际上,我试图插入一些代码到XML文件,但换行符在中间,那么最优雅的方式是什么?我想出了一个可怕的perl单行文本,但是双行文件似乎会导致失败。
我想改变从一个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
我想出了这个大ugl Ÿ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
编辑:从扎伊德更正代码:
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上,命令将从shell脚本运行而不是perl脚本。
我会给你一个镜头,谢谢。我认为我需要转义所有散列,因此从shell脚本运行时不会将其解释为注释。正如你所指出的,我的解决方案是可怕的。捕捉字符串的使用更加优雅。我只有大约2天进入perl,并且有很多东西需要学习。 – Veazer 2012-01-31 16:42:25
@ user30441这不是捕获,它是查找断言。在shell脚本中使用时,元字符会变得麻烦。将代码放入脚本并调用它可能会更容易。例如。 'perl/home/script.pl'。 – TLP 2012-01-31 16:48:16
感谢您的澄清。我试图避免调用任何外部脚本,并且您的方法运行良好。 – Veazer 2012-01-31 17:01:02