如何使这个Perl单线程在文件中排成一行?

时间:2008-11-30 06:48:58

标签: regex perl

我正在尝试编写一个单行的Perl脚本,它将配置文件中的一行从“已注释”切换为不返回。到目前为止,我有以下内容:

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

我试图找出替换(...)部分中的代码。如果没有匹配,我希望替换插入'#',如果匹配则删除它。

伪代码:

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

我的Perl非常生疏,我不知道如何将其纳入s///e替代品中。

我的理由是创建一个脚本,它将在两个布局之间更改(切换)我的显示设置。我宁愿只用一个脚本完成这个。

我对替代方法的建议持开放态度,但我想保留一个单行,我可以将其包含在一个shell脚本中,该脚本在我更改布局时正在做其他事情。

1 个答案:

答案 0 :(得分:12)

perl -pi -e 's/^(#?)(?=\tDefaultServerLayout)/ ! $1 && "#" /e' foo

注意添加?=以使用look-ahead assertion简化替换字符串。

有些人可能更喜欢s /.../ $ 1? “”:“#”/ e。