我需要替换多个CSS文件中的一些文本,但是第一次出现。只用多个文件替换多个文件中的第一个匹配
我试着更换:
perl -pi -e 's/(width:).*;/$1 100%;/' filename.css
但这种替代的每次发生后的值“宽度”的文件,即使我不使用/ g的改性剂。 我在最近的Ubuntu机器上运行这个。
我需要替换多个CSS文件中的一些文本,但是第一次出现。只用多个文件替换多个文件中的第一个匹配
我试着更换:
perl -pi -e 's/(width:).*;/$1 100%;/' filename.css
但这种替代的每次发生后的值“宽度”的文件,即使我不使用/ g的改性剂。 我在最近的Ubuntu机器上运行这个。
你可以第一个后停止更换:
perl -pi -e '$a=1 if(!$a && s/(width:).*;/$1 100%;/);' filename.css
你可以试试这个:
perl -pi -e 's/(width:).*;/$a?$&:++$a&&"$1 100%;"/e' filename.css
也许s/(width:).*;/$1 100%;/o
会做什么?
没有人解决了您的实际题目问题的含义。我建议同样的方法在此使用,仅修改:
perl -pie '!$subbed{$ARGV} and s/(width:).*;/$1 100%;/ and $subbed{$ARGV}++' *.css
将未尺寸$ARGV
是name of the current file。因此,对于每个文件,您只替换第一个匹配项。 “glob”*.css
将发送多个文件。如果您执行其他人建议的标量切换,则将只使用该模式修改第一个文件中的第一个匹配项。 (虽然也许这就是你想要的。)
如果你在段落模式下阅读,每个文件只有一行;因此s ///不带/ g修饰符将替换每个文件中的第一个实例,然后移至下一个文件:
perl -0777 -pi -e's/(width:).*;/$1 100%;/' *.css
或者更短:'... -e'!$ x && s/.../.../&&($ x = 1)''。此外,只有在问题中只有一个文件时才有效。不幸的是,它不适用于多个文件。 – musiKk 2011-06-08 11:45:06
这个为我工作,thanx! – 2011-06-08 12:51:24
@musikk,这就是为什么我贡献了我的答案,这将适用于多个文件。 – Axeman 2011-06-08 13:25:13