【发布时间】:2018-07-26 13:04:50
【问题描述】:
我必须优化一个shell脚本,但是一周后,我没有成功优化它。
我必须递归搜索目录中的 .c .h 和 .cpp 文件,并检查是否存在这样的单词: "float short unsigned continue for signed void default goto sizeof volatile do if static while"
words=$(echo $@ | sed 's/ /\\|/g')
files=$(find $dir -name '*.cpp' -o -name '*.c' -o -name '*.h' )
for file in $files; do
(
test=$(grep -woh "$words" "$file" | sort -u | awk '{print}' ORS=' ')
if [ "$test" != "" ] ; then
echo "$(realpath $file) contains : $test"
fi
)&
done
wait
我尝试过使用 xargs 和 -exec,但没有结果,我必须保持这种结果格式:
/usr/include/c++/6/bits/stl_set.h 包含:默认为 if void
也许你可以帮助我(优化它)..
编辑:我必须保持每个单词出现一次 是的:虽然,对于,易变的...... NOPE: while, for, for, volatile...
【问题讨论】:
-
我用
egrep而不是grep尝试了这个,它奏效了。grep -E应该也能正常工作 -
它正在工作,但我必须对其进行更多优化.. :/ 它需要大约 1.5 秒,它必须是 0.6 秒 -.-
-
如果性能是一个很大的问题,那么也许 shell 脚本不是解决问题的方法。您尝试提供的答案了吗?