Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/17.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
将regex替换从RegEXR转换为在bash脚本中工作_Regex_Bash_Global_Osx Mavericks_Multiline - Fatal编程技术网

将regex替换从RegEXR转换为在bash脚本中工作

将regex替换从RegEXR转换为在bash脚本中工作,regex,bash,global,osx-mavericks,multiline,Regex,Bash,Global,Osx Mavericks,Multiline,我试图在bash脚本中创建一个regex替换命令,但是在玩了单引号、双引号和转义字符之后,我开始紧张起来。我使用RegEXR编写模式,并得出以下结论: 我搜索: /\.icon-(.*) {\n\t/gm 并希望将其替换为: if(strpos(\$embedicons,'$1') !== false) { \$svgicons .= <<<'EOD'\n\.$1 { .icon-basket-14-icon { background-image: url('dat

我试图在bash脚本中创建一个regex替换命令,但是在玩了单引号、双引号和转义字符之后,我开始紧张起来。我使用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;
}
使用此选项:

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;
}

如果(strpos($embedicons,'basket-14-icon')!==false){$svgicons.=我建议对这种替换使用
sed
,这行代码将满足您的要求:

sed "s/^.icon-\(.*\) {$/if(strpos(\$embedicons,'\1') !== false) { \$svgicons .= <<<'EOD'\n.\1 {/"g input_file.txt
输出:

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;
}
testing data with space -
and newlines /'\ 
命令(
tr
正在将换行符换成波浪形,然后再换回来):


谢谢Josh,谢谢你的回复。我正在尝试直接测试它。似乎我的sed版本(在OSX Mavericks上)不喜欢-r选项。删除后,请参阅抱怨:sed:1:“s/^.icon-(.*)\{$/if(st…):RE错误:重复计数无效我会玩一玩,然后试着让它工作。非常感谢你的长时间回复和所有提示。每一点知识对我来说都是一个里程碑。你可以删除-r标志,然后你将不得不跳出语法括号和括号。我现在无法测试,但会编辑。如果你不能让它工作,稍后将返回!因此,请使用你的救命啊,我总算成功了。我不确定这看起来有多业余,但这对我来说现在很有用:
sed“s|\.icon-\(.*){if(strpos(\$embedicons,'\1')!==false){\$svgicons\.=您可以再次使用sed代替tr,这只是一个较长的命令,而且可能更昂贵:
sed-e':a'-e'N'-e'$!ba'-e's/\N/PLACEHOLDERSTRING/g'
要删除换行符,
sed-e':a'-e'N'-e'$!ba'-e's/PLACEHOLDERSTRING/\N/g'
要替换它们。
testing data with space -
and newlines /'\