问题描述
我只是使用简单的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