Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
sed注释掉具有特定字体系列的css文件_Css_Fonts_Sed_Multiline - Fatal编程技术网

sed注释掉具有特定字体系列的css文件

sed注释掉具有特定字体系列的css文件,css,fonts,sed,multiline,Css,Fonts,Sed,Multiline,我一直在寻找一种方法来注释掉.css文件,该文件可能在@font-face、#id、选择器和/或.class中指明了某个字体系列。如果使用/foobar/a\(append)和/foobar/I\(insert)将所有内容都放在一行上,我可以使用sed执行此操作。但是,如果所有内容都放在多行上,那么执行此操作的最佳方法是什么 示例: 之前 @font-face { font-family: "foobar"; src: url(fonts/foobar.ttf); } h1 {

我一直在寻找一种方法来注释掉
.css
文件,该文件可能在
@font-face
#id
、选择器和/或
.class
中指明了某个字体系列。如果使用
/foobar/a\
(append)和
/foobar/I\
(insert)将所有内容都放在一行上,我可以使用
sed
执行此操作。但是,如果所有内容都放在多行上,那么执行此操作的最佳方法是什么

示例: 之前

@font-face {
    font-family: "foobar";
    src: url(fonts/foobar.ttf);
}

h1 {
       font-family: "foobar";
}

.foobar {
    font-family: "foobar";
}
最终结果:

/* @font-face {
    font-family: "foobar";
    src: url(fonts/foobar.ttf);
} */

/* h1 {
       font-family: "foobar";
} */

/* .foobar {
    font-family: "foobar";
} */

可以用perl和awk来实现

perl -00 -lpe '$_ = "/* $_ */" if /font-family:\s+.foobar/' file
awk -v RS= '/font-family:[[:blank:]]+.foobar/ {$0 =  "/* " $0 " */"} 1' file
这两种方法的工作原理相同:逐段读取文件(以空行分隔),测试正则表达式,如果找到,则添加注释标记

要在位编辑文件,可以使用

perl -i ...(as above)...

awk ...(as above)... > tmpfile && mv tmpfile file
这可能适用于您(GNU-sed):


+1、这个想法很聪明。建议通过
s!*!/*&*/!”更改replace命令,将字符替换为
/
sed '/{/!b;:a;$!N;/}/!ba;/font-family:\s*"foobar";/s/.*/\/* & *\//' file