【发布时间】:2023-03-23 06:15:01
【问题描述】:
我对脚本表演很生气。
基本上我必须替换 35000 多个文件中的 600 个字符串。
我有这样的东西:
patterns=(
oldText1 newText1
oldText2 newText2
oldText3 newText3
)
pattern_count=${#patterns[*]}
files=(`find \. -name '*.js'`);
files_count=${#files[*]}
for ((i=0; i < $pattern_count ; i=i+2)); do
search=${patterns[i]};
replace=${patterns[i+1]};
echo -en "\e[0K\r Status "$proggress"%. Iteration: "$i" of " $pattern_count;
for ((j=0; j < $files_count; j++)); do
command sed -i s#$search#$replace#g ${files[j]};
proggress=$(($i*100/$files_count));
echo -en "\e[0K\r Inside the second loop: " $proggress"%. File: "$j" of "$files_count;
done
proggress=$(($i*100/$pattern_count));
echo -en "\e[0K\r Status "$proggress"%. Iteration: "$i" of " $pattern_count;
done
但这需要花费大量时间。还有另一种解决方案吗?可能只使用一次 sed 而不是双循环?
非常感谢。
【问题讨论】:
-
您可以使用
sed -e链接替换,并通过将与号传递给这些命令来并行运行多个进程,例如sed -e 's/word1/replace1/' -e 's/word2/replace2' &