Triying用SED替换PHP中的line
我想替换这个:Triying用SED替换PHP中的line,php,linux,sed,Php,Linux,Sed,我想替换这个: <li><a href="autor.php?<?=$a?>">Autor</a></li> “s”命令的语法为: s/foo/bar/ 但是字符串中只有两个未转义的“/”字符 我建议您使用不同的分隔符重新组合替换。也就是说,您也可以使用: s-foo-bar- 查找www/-type f-exec\ sed-i'\\{ s##和# }' {} \; 通过删除sed操作中的{}和\可以是一行。为了清晰起见,请使
<li><a href="autor.php?<?=$a?>">Autor</a></li>
“s”命令的语法为:
s/foo/bar/
但是字符串中只有两个未转义的“/”字符
我建议您使用不同的分隔符重新组合替换。也就是说,您也可以使用:
s-foo-bar-
查找www/-type f-exec\
sed-i'\\{
s##和#
}' {} \;
- 通过删除sed操作中的
和{}
可以是一行。为了清晰起见,请使用它\
- 使用除
之外的另一个分隔符,以便于执行sed操作,避免转义此字符(/
)#
- 在
操作之前使用模式匹配,但也可以直接进行(同样为了清晰起见)。为此,我使用s//
行为,其中s/
表示最后研究的正则表达式,以及replacment模式(找到的模式内容)中的/
&
/
,在第二种情况下是-
),因此sed不会按其应该的方式解释它。尝试用-
替换中间\-
,只需使用字符串运算符而不是regexp和“特殊”sed替换模式:
$ cat file
foo<li><a href="autor.php?<?=$a?>">Autor</a></li>bar
$ awk -v tgt='<li><a href="autor.php?<?=$a?>">Autor</a></li>' \
-v add='<li><a href="QTY.php?<?=$a?>">QTY</a></li>' '
s=index($0,tgt) { $0 = substr($0,1,s+length(tgt)-1) add substr($0,s+length(tgt)) }
1' file
foo<li><a href="autor.php?<?=$a?>">Autor</a></li><li><a href="QTY.php?<?=$a?>">QTY</a></li>bar
$cat文件
foo酒吧
$awk-v tgt=''\
-v add=''
s=index($0,tgt){$0=substr($0,1,s+length(tgt)-1)add substr($0,s+length(tgt))}
1'文件
foo酒吧
I use:find www/-type f-exec sed-I's-\“\\Autor\\\\”\-\“\\Autor\\\\\QTY\\\”-g'{};我得到了相同的错误。您更改了分隔符字符,但仍在转义中间分隔符(即\-)。这使得它“不是一个分隔符”
s/foo/bar/
s-foo-bar-
find www/ -type f -exec \
sed -i '\#<li><a href="autor.php?<?=\$a?>">Autor</a></li># {
s##&<li><a href="QTY.php?<?=\$a?>">QTY</a></li>#
}' {} \;
$ cat file
foo<li><a href="autor.php?<?=$a?>">Autor</a></li>bar
$ awk -v tgt='<li><a href="autor.php?<?=$a?>">Autor</a></li>' \
-v add='<li><a href="QTY.php?<?=$a?>">QTY</a></li>' '
s=index($0,tgt) { $0 = substr($0,1,s+length(tgt)-1) add substr($0,s+length(tgt)) }
1' file
foo<li><a href="autor.php?<?=$a?>">Autor</a></li><li><a href="QTY.php?<?=$a?>">QTY</a></li>bar