sed:-e表达式#1,字符52:`s'的未知选项

问题描述

我只是使用简单的sed替换通过从变量中读取文件的值来替换文件中的某些字符串

cat file.txt

root="/content/drive/Shared drives/Media Library"
# some other lines
# ...

在上述文件txt中,我打算将第1行中的/content/drive/Shared drives/Media Library替换为通过bash脚本读取的变量path的值。

例如-如果我输入/home/user作为变量的值,则file.txt中的第1行应进行如下修改

root="/home/user"

这是我的带有sed表达式的bash脚本

#!/usr/bin/env bash

read -e -p "Enter the path: " path

sed -i "1s/\/content\/drive\/Shared drives\/Media Library/${path}/" file.txt

当我执行bash脚本并将路径输入为/home/user时,它返回以下错误-

sed: -e expression #1,char 52: unkNown option to `s'

解决方法

使用sed处理文件路径时,可以通过使用备用分隔符使事情变得更容易,该分隔符不属于要处理的值的一部分。分隔符可以是s命令之后的任何字符。在示例中经常看到斜杠/,但也可以是其他任何字符,例如|#。这样就不必在值中转义/。例如:

sed -i  "1s|/content/drive/Shared drives/Media Library|${path}|" file.txt