【问题标题】:Replacing multiple CSS style strings with sed用 sed 替换多个 CSS 样式字符串
【发布时间】:2018-05-12 12:18:16
【问题描述】:

我一直在尝试找出如何替换 CSS 文件中包含的某些字符串,这些字符串包含我希望使用 Bash 一次在多个文件中替换的相同 CSS 变量字符串,以避免必须打开的繁琐任务在每个目录中添加每个 CSS 文件的实例,只是为了替换这些 CSS 文件中的某些字符串。

在我的 CSS 文件中,我想注释掉 CSS 代码中的某些行,但是我无法转义某些字符并将该行转换为注释掉的行,即; outline-style: dashed;/*outline-style: dashed;*/

我不知道如何转义 :; 字符以及以下用于注释行 /* */ 到目前为止我尝试过但对我不起作用的是以下通过在 perl 中使用 xargs;

find . -type f | xargs perl -e 's/outline-style dashed;/\/*outline-style dashed;*/\/g;'

但这会返回一个错误提示

Backslash found where operator expected at -e line 1, near "s/outline-
style dashed;/\/*outline-style dashed;*/\"
syntax error at -e line 1, near "s/outline-style dashed;/\/*outline-
style dashed;*/\"
Search pattern not terminated at -e line 1.
xargs: perl: exited with status 255; aborting

我也尝试过使用 sed,这似乎适用于最简单的替换

find . -type f -exec sed -i 's/$^outline-style\: dotted\;/\/*outline-style\: dotted\;/g' *.{css} \;

但这并不完全有效,它只会返回错误消息sed: can't read *.{css}: No such file or directory

我尝试不在那里添加*.{css},但仍然给我同样的错误,但没有任何 CSS 文件的输出更改。

【问题讨论】:

    标签: css bash shell sed scripting


    【解决方案1】:

    如果你没有以 .css 结尾的目录,你可以使用这个:

    shopt -s globstar
    sed -i 's/^outline-style: dashed;$/\/*outline-style: dashed;*\//' **/*.css
    

    或者您可以像这样编辑您的 find 示例:

    find . -type f -name '*.css' -exec sed -i 's/^outline-style: dashed;$/\/*outline-style: dashed;*\//' {} +
    

    请注意,某些字符确实需要转义,例如斜线。

    【讨论】:

    • hmm 似乎这些也不起作用,它没有写入 CSS 文件,但它们甚至没有输出错误,这意味着它们运行了,但它们没有做任何事情。
    • @user94959 如果该行正好是outline-style: dashed;,则两者都应该正常工作。您是否使用了选项卡或 sed 中未包含的内容?
    • @user94959 请注意,如果您的数据具有 DOS 样式的行尾字符,这也会失败。在这种情况下,您需要将文件转换为 Unix 格式或在您的 sed 中添加 \r 字符。
    • 没有制表符或其他任何东西,只有空格。据我所知,这些文件也不是 DOS 风格的字符结尾。
    • @user94959 空格到底在哪里?为了使它起作用,该行必须看起来完全outline-style: dashed;,仅此而已。如果您不确定格式,可以检查cat -v file.css,并在每行后查找^M
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-01-12
    • 2020-07-28
    • 1970-01-01
    • 1970-01-01
    • 2020-03-13
    • 2016-06-07
    • 1970-01-01
    相关资源
    最近更新 更多