我试图在 AIX 6.1 上将每次出现的字符串“FULL_RUN_SCRIPT_DIR”替换为“/etc/rc.d/..”之类的路径
这是代码
SEE_FILE_PATH="$INIT_DIR$SERVICE_NAME"
FULL_RUN_SCRIPT_DIR="FULL_RUN_SCRIPT_DIR"
SERVICE_FILE="$INIT_DIR$SERVICE_NAME"
echo "String1:$FULL_RUN_SCRIPT_DIR"
echo "String2:$SEE_FILE_PATH"
echo "String3:$SERVICE_FILE"
perl -p -i -e "s/$FULL_RUN_SCRIPT_DIR/$SEE_FILE_PATH/g" "$SERVICE_FILE"
但是我收到错误:
String1:FULL_RUN_SCRIPT_DIR
String2:/etc/rc.d/init.d/seelinkdeployer
String3:/etc/rc.d/init.d/seelinkdeployer
Bareword found where operator expected at -e line 1, near "s/FULL_RUN_SCRIPT_DIR//etc"
syntax error at -e line 1, near "s/FULL_RUN_SCRIPT_DIR//etc"
Execution of -e aborted due to compilation errors.
有什么想法吗?
答案1
出现问题的第一个提示是当您出现以下情况时:
...
near "s/FULL_RUN_SCRIPT_DIR//etc"
...当您期望表达式类似于
...
near "s/FULL_RUN_SCRIPT_DIR//etc/rc.d/init.d/seelinkdeployer/g"
...具有 的全部价值$SEE_FILE_PATH
。
您遇到的问题是,您使用正斜杠/
将搜索文本与 Perls//
运算符中的替换文本分开,并且至少在您的替换文本中存在正斜杠。
您有几个选择:
不要使用正斜杠作为
s//
;中的分隔符使用搜索文本或替换文本中不存在的内容。例如,~
:perl -p -i -e "s~$FULL_RUN_SCRIPT_DIR~$SEE_FILE_PATH~g" "$SERVICE_FILE"
将搜索和/或替换文本中的转义斜杠替换为斜杠(假设
//
参数扩展使用类似 bash 的 shell):SEE_FILE_PATH=/etc/rc.d/init.d/seelinkdeployer SEE_FILE_PATH=${SEE_FILE_PATH//\//\\/}
进一步阅读: