SED逃脱特殊人物

时间:2018-01-17 19:06:29

标签: bash sed

我正在尝试使用SED并更改文件中的一行:

ggsave()

 "homepage": "http://localhost:123/",
使用

 "homepage": "http://localhost:123/newpath",

但它不起作用,也许我忘了逃避?

编辑: 此外,文件中还有另一条近乎相似的行(不应该被修改)!

sed -i "s/^"homepage": "http:\/\/localhost:123\/"/"homepage": "http:\/\/localhost:123\/newpath"/g"

3 个答案:

答案 0 :(得分:2)

$ cat 48308267
"homepage": "http://localhost:123/",<br>
"proxy": "http://localhost:123",
$ sed -i '/^[[:blank:]]*"homepage"/s#:123/#:123/newpath#' 48308267
# the -i option writes the changes to the file itself
$ cat 48308267
"homepage": "http://localhost:123/newpath",<br>
"proxy": "http://localhost:123",

更通用的版本是重用匹配的模式

$ cat 48308267
"homepage": "http://localhost:123/",<br>
"proxy": "http://localhost:123",
$ sed -iE '/^[[:blank:]]*"homepage"/s#(:[[:digit:]]+/)#\1newpath#' 48308267
$ cat 48308267
"homepage": "http://localhost:123/newpath",<br>
"proxy": "http://localhost:123",

注意:通用版本适用于任何端口号,而不仅仅是123

您可以利用将s命令的分隔符从默认/更改为几乎与模式不冲突的任何内容。

所有好: - )

答案 1 :(得分:1)

echo '"abc": "http://localhost:123/",<br>' | \
  sed 's|"abc": "http://localhost:123/",<br>|"abc": "http://localhost:123/newpath",|'

sed接受其他分隔符,例如:|等;不仅/

答案 2 :(得分:0)

以下简单的sed可能对您有帮助。

sed 's/",$/newpath",/g'  Input_file

输出如下。

"abc": "http://localhost:123/newpath",

如果您对上面代码输出到同一个Input_file本身感到满意,那么也可以在-i添加sed选项。