我想替换路径
(setq myFile "/some/path")
Run Code Online (Sandbox Code Playgroud)
在一个文件中。我尝试用 sed 来做到这一点:
find ./_build/html -type f -name '*.html' | while read myFile; do
MyFile=`readlink -f "$myFile"`
sed -i "s/setq myFile [)]*/setq myFile \"$MyFile\"/" sphinx_nowrap.el
# and then some actions on file
done
Run Code Online (Sandbox Code Playgroud)
和 perl:
find ./_build/html -type f -name '*.html' | while read myFile; do
MyFile=`readlink -f "$myFile"`
perl -ne "s/setq myFile .+/setq myFile \"$MyFile\")/" sphinx_nowrap.el
# and then some actions on file
done
Run Code Online (Sandbox Code Playgroud)
但两者都给出错误。
编辑:
这是一个 perl 错误:
Having no space between pattern and following word is deprecated at -e line 1.
Bareword found where operator expected at -e line 1, near "s/setq myFile .+/setq myFile "/home"
String found where operator expected at -e line 1, at end of line
(Missing semicolon on previous line?)
syntax error at -e line 1, near "s/setq myFile .+/setq myFile "/home"
Can't find string terminator '"' anywhere before EOF at -e line 1.
Run Code Online (Sandbox Code Playgroud)
这是 sed 错误:
sed: -e expression #1, char 34: unknown option to `s'
Run Code Online (Sandbox Code Playgroud)
编辑2:
所以解决办法就是改变分隔符。并且 sed 表达式也应该改变:
sed -i "s!setq myFile .*!setq myFile \"$MyFile\")!" sphinx_nowrap.el
Run Code Online (Sandbox Code Playgroud)
看起来 perl (和 sed)将文件路径中的斜杠识别为正则表达式分隔符。您可以使用不同的分隔符:
find ./_build/html -type f -name '*.html' | while read myFile; do
MyFile=`readlink -f "$myFile"`
perl -ne "s!setq myFile .+!setq myFile \"$MyFile\")!" sphinx_nowrap.el
# and then some actions on file
done
Run Code Online (Sandbox Code Playgroud)
或对于 sed:
find ./_build/html -type f -name '*.html' | while read myFile; do
MyFile=`readlink -f "$myFile"`
sed -i "s!setq myFile [)]*!setq myFile \"$MyFile\"!" sphinx_nowrap.el
# and then some actions on file
done
Run Code Online (Sandbox Code Playgroud)