我有以下 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#"