我有一个替换另一个文件中的字符串的 bash 脚本:
...
# make MC input script
sig=2.6
awk -v sig="$sig" '{
sub(/XSIGX/, sig);
print;
}' input.txt > output.txt
当我在 input.txt
上运行它时,我得到以下 output.txt
(注意替换为“2.6”,但 cat 中没有
行):
...
echo "hi" >> /work/d/dfranz/o2_modeling/simulated_densities_2.6.txt
cat /work/d/dfranz/o2_modeling/simulated_densities_2.6.txt | sort -nk1 > /work/d/dfranz/o2_modeling/simulated_rho_sorted_XSIGX.txt # <--- This XSIGX was not replaced but the first occurrence in this line was
rm /work/d/dfranz/o2_modeling/simulated_densities_2.6.txt
最佳答案
在 AWK 函数中,sub
替换一个/第一个实例。如果将 sub
替换为 gsub
应该替换所有实例。因此这应该可以正常工作:
sig=2.6
awk -v sig="$sig" '{
gsub(/XSIGX/, sig);
print;
}' input.txt > output.txt
关于string - awk 全局替换所有出现的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42032201/