【发布时间】:2013-12-07 05:24:46
【问题描述】:
我编写了一个 bash 脚本,它在文件上调用 sed 命令(除其他外)以完成对 2 个不同字符串的查找/替换。
问题是,运行脚本后,我检查了文件,但没有任何更新。但是,如果我运行正在生成的命令(无论如何我都会将它们作为输出回显),那么它们就会起作用。
例如,在我的脚本中:
echo "/usr/local/bin/sed -i -e 's/${String1}/${String1R}/g;s/\/${String2}\//\/${String2R}\//g' ${ROOT_DIR}/data/file.sql"
/usr/local/bin/sed -i -e 's/${String1}/${String1R}/g;s/\/${String2}\//\/${TString2R}\//g' ${ROOT_DIR}/data/file.sql
运行脚本不会改变file.sql;但是,如果我运行打印到控制台的命令,例如/usr/local/bin/sed -i -e 's/file_name1/file_name2/g;s//path_substring1///path_substring2//g' /path/to/file/file.sql 完美运行!
【问题讨论】:
-
我不明白“回声”的目的......
-
您经常使用“字符串”这个词,但是您的脚本没有进行字符串比较,而是进行正则表达式比较,可以吗?如果“String1”,它会回来咬你。例如,包含
.、?、*等RE元字符。