Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/26.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
Triying用SED替换PHP中的line_Php_Linux_Sed - Fatal编程技术网

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