【问题标题】:find and replace - with awk or sed查找和替换 - 使用 awk 或 sed
【发布时间】:2017-11-11 16:38:48
【问题描述】:

我正在使用 Electron 和 ReactJS 编写一个编辑 CSS 文件的桌面应用程序。

我需要扫描 CSS 以寻找类选择器,然后清除以下声明块并添加一些新属性。

棘手的部分是匹配选择器中的类。我需要将类作为实际目标(不是父级),但可能有多个以逗号分隔的选择器,因此我需要检查所有这些选择器。

例如, 在这个文件中,我正在搜索 containerApp 类:

.section-main .section-right , .menu .container-manu , .containerApp .container-nav { 背景:黑色; }

.section-main2 .section-left , .menu .container-manu , .section-group-d .containerApp { 背景:红色; }

第一个块不匹配,因为 .containerApp 仅作为实际目标 .container-nav 的父级提及。第二个块确实匹配,我想删除背景:红色;并用其他东西替换它。 进行这种 CSS 匹配和重写的最佳方法是什么?

【问题讨论】:

  • 欢迎来到 StackOverflow。请采取tour,学习提出好问题stackoverflow.com/help/how-to-ask,制作minimal reproducible example。一个 MCVE 应该包括各种样本输入(说明所有方面)和所需的输出。

标签: awk sed scripting text-processing gawk


【解决方案1】:

如果我正确理解您的要求,.containerApp 必须是选择器的最后一个元素。由于选择器以逗号或花括号结尾,因此您需要使用合适的正则表达式:

sed '/\.containerApp *[,{]/s/{[^}]*}/{ my new css rules }/' app.css

【讨论】:

  • 你说得对..我只需要知道怎么做...如何清理 {} 之间的所有内容并放置新属性。你能帮帮我吗?
  • @Hananc86 抱歉,我以为你只是想删除整个规则。
  • 非常感谢!它非常接近我需要的。唯一的问题是它仅在规则位于一行时才有效。另外你能指定只在第一场比赛上工作吗? .非常感谢!我很高兴:)
  • @Hananc86 你的意思是文件中第一个匹配的选择器吗?在sed 中匹配跨越多行的模式非常困难。
  • 我不知道为什么购买有时有效,有时无效...我不知道为什么。 ;/
猜你喜欢
  • 2014-12-04
  • 1970-01-01
  • 2020-02-03
  • 2017-02-14
  • 2020-04-25
  • 2010-12-07
相关资源
最近更新 更多