当字符串中有“http://”时,sed如何替换?

当字符串中有“http://”时,sed如何替换?

xx我有一个包含以下内容的文件:

@base_url = "http://dmstaffing-stage.herokuapp.com/"

我想使用 sed 消除这一行(什么都不替换)。我已成功地将这种 sed 技术与其他几行一起使用,例如

sed -i 's/require "selenium-webdriver"//' xx

但我对 @base_url 行的尝试不起作用。我怀疑 http:// 中的 " 或 // 搞砸了,但我似乎无法修复!

我努力了:

$ sed  's/@base_url = "http://dmstaffing-stage.herokuapp.com/"//' xx
sed: -e expression #1, char 23: unknown option to `s'

$ sed  's/@base_url = \"http://dmstaffing-stage.herokuapp.com/\"//' xx
sed: -e expression #1, char 24: unknown option to `s'

$ sed  's/@base_url = "http:\/\/dmstaffing-stage.herokuapp.com/"//' xx
sed: -e expression #1, char 58: unknown option to `s'

但没有一个起作用。

答案1

如前所述,使用其他分隔符或逃脱斜线。你的最后一次尝试错过了最后一个斜杠的转义。

正如所指出的@斯蒂芬查泽拉斯,逃脱dot也是如此。

并且,包括@特登如果sed不需要;grep -Fxv,其中-F是固定字符串,而不是正则表达式,将是一个选项。-x确保它匹配整行。-v反转。

不过,一个简单(非常简单)的基准测试time -v似乎更受欢迎sed。 (GNU 变体。)

sed 's/@base_url = "http:\/\/dmstaffing-stage\.herokuapp\.com\/"//' xx

要完全删除它(不留空行),请使用:

sed '/@base_url = "http:\/\/dmstaffing-stage\.herokuapp\.com\/"/d' xx
                                                                |
                                                                +--- Delete

答案2

尝试使用另一个分隔符:

sed  's|@base_url = "http://dmstaffing-stage.herokuapp.com/"||' xx

答案3

正则表达式中的斜杠弄乱了 sed 的分隔符。但你可以使用不同的分隔符比斜杠。例如:

sed  's#@base_url = "http://dmstaffing-stage.herokuapp.com/"##' xx

答案4

您可以转义斜线,例如sed -e 's/"@base_url = "http:\/\/dmstaffing-stage.herokuapp.com\/"/d'.这种丛林/\/\//\//是所谓的 LTS(倾斜牙签综合症)的症状。解决这个问题的最佳方法是使用另一个分隔符,就像;您的情况一样,或者今天您喜欢的任何其他非字母数字字符(显然,不包括在您想到的任何损坏中)。

相关内容