我需要在多个css文件中替换一些文本,但是在第一次出现的时候。
我试过替换为:
perl -pi -e 's/(width:).*;/$1 100%;/' filename.css
但是,即使我没有使用/ g修饰符,这也会在文件中每次出现'width:'后替换该值。 我在最近的Ubuntu机器上运行它。
答案 0 :(得分:6)
没人提到你的实际头衔问题的含义。我建议采用与此处相同的方法,仅修改:
perl -pie '!$subbed{$ARGV} and s/(width:).*;/$1 100%;/ and $subbed{$ARGV}++' *.css
未标注的$ARGV
是name of the current file。因此,对于每个文件,您只替换第一个匹配项。 “glob”*.css
将发送多个文件。如果您执行其他人建议的标量开关,您将仅使用该模式修改 first 文件中的第一个匹配项。 (虽然,也许这就是你想要的。)
答案 1 :(得分:5)
如果你在段落模式下阅读,每个文件只有一行;因此没有/ g修饰符的s ///将替换每个文件中的第一个实例,然后移动到下一个文件:
perl -0777 -pi -e's/(width:).*;/$1 100%;/' *.css
答案 2 :(得分:4)
您可以在第一个之后停止更换:
perl -pi -e '$a=1 if(!$a && s/(width:).*;/$1 100%;/);' filename.css
答案 3 :(得分:0)
你可以试试这个:
perl -pi -e 's/(width:).*;/$a?$&:++$a&&"$1 100%;"/e' filename.css
答案 4 :(得分:0)
也许s/(width:).*;/$1 100%;/o
会这样做?