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