![如何使用 bash 脚本将文件路径添加到文件的指定行?](https://linux22.com/image/1446717/%E5%A6%82%E4%BD%95%E4%BD%BF%E7%94%A8%20bash%20%E8%84%9A%E6%9C%AC%E5%B0%86%E6%96%87%E4%BB%B6%E8%B7%AF%E5%BE%84%E6%B7%BB%E5%8A%A0%E5%88%B0%E6%96%87%E4%BB%B6%E7%9A%84%E6%8C%87%E5%AE%9A%E8%A1%8C%EF%BC%9F.png)
我有以下 bash 代码:
echo "Enter an input path"
read -e input_path
OLDTEXT="\put(0,0){\includegraphics{/"
NEWTEXT="\put(0,0){\includegraphics{$input_path/"
find . -name "*.tex" -print0 | xargs -0 sed -i '$NEWTEXT' -e '$OLDTEXT'
sed 行总是产生错误。此版本的代码产生以下错误消息:
sed:-e 表达式 #1,字符 2:未知命令:`O'
帮助?
答案1
您需要转义反斜杠:
oldtext='[\]put(0,0){[\]includegraphics{/'
newtext="\\\\put(0,0){\\\\includegraphics{$input_path/"
另外,-i
不要-e
做你期望的事情。尝试:
sed "s|$oldtext|$newtext|" file
如果以上内容满足您的要求,则使用-i
它来更改文件:
find . -name '*.tex' -exec sed -i "s|$oldtext|$newtext|" {} \;
使用 GNUfind
或现代 BSD时find
,使用以下方法更高效:
find . -name '*.tex' -exec sed -i "s|$oldtext|$newtext|" {} +
答案2
这没有意义:sed -i '$NEWTEXT' -e '$OLDTEXT'
——即使你正确地使用双引号以便变量可以扩展,这些值也不是有效的 sed 命令。
我假设您正在尝试搜索和替换:
sed -i "s#$OLDTEXT#$NEWTEXT#"