为什么我的回车不能用我的perl脚本工作?

时间:2015-05-06 18:33:36

标签: regex macos bash perl

从sed进入perl我正在尝试在CSS文件上练习,但我遇到了问题而且我找不到多次搜索可能出现的问题。在我的bash脚本中,我的目标是一个包含以下内容的CSS文件:

.thisclass
{   font-family: "Times New Roman";
    line-height: 1.20em;
    font-size: 1.00em;
    margin: .25em 0;
    color: rgb(0,0,0);
}

我的目标是:

.thisclass {    
    font-family: "Times New Roman";
    line-height: 1.20em;
    font-size: 1.00em;
    margin: .25em 0;
    color: rgb(0,0,0);
}

我尝试过的perl是perl -pe 's:\r^{: {\r:g',但它不起作用。如果我尝试:

perl -pe 's:^{:foobar:g'

输出是:

.thisclass
foobar  font-family: "Times New Roman";
    line-height: 1.20em;
    font-size: 1.00em;
    margin: .25em 0;
    color: rgb(0,0,0);
}

如果我尝试perl -pe 's:\r:foobar:g',整个文档会被foobar

修改

在我的文本编辑器中,我可以\r^{,在我的终端中我可以s/\n{/ {\n/g;但是我无法通过带有{{1的脚本执行的回车或新行来处理perl }}。我尝试使用sh foo.sh(等同于[\s]的空白字符),但没有成功。

那么为什么马车不能用我的perl工作呢?有没有更好的方法来执行我想要做的事情?如果有更好的方法可以解释原因,请。

1 个答案:

答案 0 :(得分:3)

您逐行读取文件,因此每行以回车符或换行符结束 - 之后没有任何内容。 \r{不会出现在任何一行上。

您可以使用-0777开关启用slurp模式并将整个文件作为字符串读取:

perl -0777 -pe 's/\R{/ {\n /g' foo.css

\R应匹配任何类型的换行符,无论是\r\n\r还是\n