我正在编写一个脚本,删除normalize.css中的评论,如下所示:
/*! normalize.css v7.0.0 | MIT License | github.com/necolas/normalize.css */
/* Document
========================================================================== */
/**
* 1. Correct the line height in all browsers.
* 2. Prevent adjustments of font size after orientation changes in
* IE on Windows Phone and in iOS.
*/
html {
line-height: 1.15; /* 1 */
-ms-text-size-adjust: 100%; /* 2 */
-webkit-text-size-adjust: 100%; /* 2 */
}
/* Sections
========================================================================== */
/**
* Remove the margin in all browsers (opinionated).
*/
我试过了
#!/usr/bin/env sh
normalize="node_modules/normalize.css/normalize.css"
if [[ -f "$normalize" ]]; then
grep -v "\\/\\*([^*]|[\\r\\n]|(\\*+([^*\\/]|[\\r\\n])))*\\*\\/+" $normalize > index.css
else
echo "There is no normalize.css available."
fi
我已经通过normalize.css
package.json
{
"devDependencies": {
"normalize.css": "latest"
}
}
您可以将上述package.json
保存在文件夹中并运行npm i
来对此进行测试。如果你有节点和npm,你应该有node_modules
文件夹,并在其中标准化。
regex101使用上面的正则表达式查找注释,但grep只输出带注释的同一文件。
我做错了什么?
编辑:预期输出:
html {
line-height: 1.15;
-ms-text-size-adjust: 100%;
-webkit-text-size-adjust: 100%;
}
答案 0 :(得分:1)
您可以使用此awk
命令删除所有以/*
开头并以*/
结尾的css评论:
cat remComm.awk
function remComm() {
if ( !m )
m = index($0, cs);
if ( m && p = index($0, ce) ) {
$0 = substr($0, 1, m-1) substr($0, p+2);
if (m = index($0, cs))
remComm();
}
}
BEGIN {
cs="/*";
ce="*/";
m = 0;
}
{
remComm();
if ( !m && NF )
print;
}
将其用作:
awk -f remComm.awk normalize.css
<强>输出:强>
html {
line-height: 1.15;
-ms-text-size-adjust: 100%;
-webkit-text-size-adjust: 100%;
}
/*
时设置评论的起始位置,并在文件中获取*/
时获得结束位置。substring
功能,我们会删除评论的位置,并在$0
remComm
以删除每行多个注释。!NF
我们跳过打印空白或空白行。