【发布时间】:2014-04-11 13:56:26
【问题描述】:
我正在尝试在 bash 脚本中创建一个正则表达式替换命令,但是在使用了单引号、双引号和转义字符之后,我的头发被拉了出来。我使用 RegEXR 来组合模式,并得出以下结论:
我搜索:
/\.icon-(.*) {\n\t/gm
并希望将其替换为:
if(strpos(\$embedicons,'$1') !== false) { \$svgicons .= <<<'EOD'\n\.$1 {
这取代了这个:
.icon-basket-14-icon {
background-image: url('data:image/svg+xml;charset=US-ASCII,blahblah');
background-repeat: no-repeat;
}
用这个:
if(strpos($embedicons,'basket-14-icon') !== false) { $svgicons .= <<<'EOD'
.basket-14-icon {background-image: url('data:image/svg+xml;charset=US-ASCII,blahblah');
background-repeat: no-repeat;
}
但是,我无法在 bash 脚本中实现它。我不确定它是否相关,但我在 OSX Mavericks 并使用终端应用程序。虽然 RegExr 中的模式对我来说很有意义,但一旦我开始逃避它,我就完全不知道发生了什么。
- 如何确保正则表达式是全局的和多行的?
- 使用其他选项是否比内置正则表达式更好?
- 是否有在线资源可以教 (bash) 正则表达式来完成新手?
- 是否存在匹配所有内容(包括空格和 换行符)直到给定的字符链,如星号 (*)?
显然我不是在寻找讲义,因为这个问题经常困扰我......我很想学习正则表达式并通过学习来解决我的问题,我在网上研究了一些例子,但它们似乎太先进了。也许有一个像 RegExr 这样的在线生成器,可以翻译成 bash 兼容和 PHP 兼容的正则表达式模式版本?
更新/解决方案:
以下似乎在 OSX Mavericks 终端中对我有用:
sed "s|\.icon-\(.*\) {|if(strpos(\$embedicons,'\1') !== false) { \$svgicons \.= <<<'EOD' \.\1 {|g"
【问题讨论】:
标签: regex bash global osx-mavericks multiline