我正在尝试编写一个单行的Perl脚本,它将配置文件中的一行从"已注释"切换为不返回.到目前为止,我有以下内容:
perl -pi -e 's/^(#?)(\tDefaultServerLayout)/ ... /e' xorg.conf
我试图找出替换(...)部分中的代码.如果没有匹配,我希望替换插入'#',如果匹配则删除它.
伪代码:
if ( $1 == '#' ) then print $2 else print "#$2"
我的Perl非常生锈,我不知道如何将它变成s///e
替代品.
我之所以这样做是为了创建一个脚本,它将在两个布局之间更改(切换)我的显示设置.我希望只在一个脚本中完成此操作.
我对替代方法的建议持开放态度,但我想保留一个单线程,我可以将其包含在一个shell脚本中,该脚本在我更改布局时正在做其他我希望发生的事情.
perl -pi -e 's/^(#?)(?=\tDefaultServerLayout)/ ! $1 && "#" /e' foo
注意添加?=以通过使用先行断言来简化替换字符串.
有些人可能更喜欢s /.../ $ 1?"":"#"/ e.