我正在使用 Ubuntu(Precise 12.04),我正在尝试编写一些 bash 脚本来查看文件是否通过使用 diff 命令通过 awk replace 进行更改。
我做了以下测试:
#! /bin/bash
diff fileA.htm fileB.htm &> /dev/null
if [ $? -ne 0 ]; then
echo "changed";
else
echo "not changed";
fi
它有效,因此我扩展了脚本,如下所示:
#! /bin/bash
find . \( -name '*.htm' -o -name '*.html' \) \
-exec sh -c \
"awk '/START_TAG/{f=1;print;while (getline < \"REPLACEMENT_FILE.tmp\"){print}}/END_TAG/{f=0}!f' \"{}\" > \"{}.awk\"; diff \"{}\" \"{}.awk\" &> /dev/null; \
if [ $? -ne 0 ]; then\
echo \"{} changed\"; \
else \
echo \"{} not changed\"; \
fi" \;
awk 正在运行,diff 命令也正在运行,但是我无法从 diff &> /dev/null 获取输出并在我的 if 语句中捕获。
我假设在 find -exec 语句中运行该语句时可能需要在那里更改一些内容但不确定如何去做。
答案1
我想我已经找到问题了,修复版本如下:
#! /bin/bash
find . \( -name '*.htm' -o -name '*.html' \) \
-exec sh -c \
$'awk \'/START_TAG/{f=1;print;while (getline < \"REPLACEMENT_FILE.tmp\"){print}}/END_TAG/{f=0}!f\' \"{}\" > \"{}.awk\"; diff \"{}\" \"{}.awk\" &> /dev/null;\n \
if [ $? -ne 0 ]; then\n \
echo \"{} changed\";\n \
else\n \
echo \"{} not changed\";\n \
fi'\n \;
我需要为 if else 语句添加换行符