1

我在 sed 中有一个小问题,我想替换以下行:

space here#Include "/usr/local/apache/conf/userdata/std/2/varr1/var2/*.conf"

或者

space here# Include "/usr/local/apache/conf/userdata/std/2/varr1/varr2/*.conf"

(注意#后面的空格)

到以下

Include "/usr/local/apache/conf/userdata/std/2/varr1/varr2/*.conf"

以下代码有效,行不以空格开头:

sed -i "s/# Include \"\/usr\/local\/apache\/conf\/userdata\/std\/2\/$varr1\/$varr2\/\*.conf\"/Include \"\/usr\/local\/apache\/conf\/userdata\/std\/2\/$varr1\/$varr2\/\*.conf\"/" file.name

任何帮助将不胜感激,谢谢大家

4

2 回答 2

0

您不需要编写路径,只需捕获它:

sed -i 's!# *Include \("[^"]*"\)!Include \1!' input.file
于 2012-11-18T21:24:34.023 回答
0

/您可以选择任何您想要的字符,而不是用作分隔符。

举例:

sed -i 's@@@g' file

因此,无需在所有内容上加上反斜杠,这对人类来说很难阅读。

最后,尝试这样做:

 sed -i 's@^ *# *Include \+"/usr/local/apache/conf/userdata/std/2/varr1/var\+2/\*\.conf"@Include "/usr/local/apache/conf/userdata/std/2/varr1/varr2/*.conf"@g' file.name

笔记

  • *字符在正则表达式中表示零或 N 次出现
  • ^字符表示行首
  • *&.是特殊字符,所以它们是反斜杠的。后来表示任何单个字符
于 2012-11-18T21:14:04.397 回答