awk 全局替换所有出现的字符串

kha*_*rim 5 string bash awk replace

我有一个 bash 脚本可以替换另一个文件中的字符串:

...
# make MC input script
sig=2.6
awk -v sig="$sig" '{
        sub(/XSIGX/, sig);
        print;  

}' input.txt > output.txt
Run Code Online (Sandbox Code Playgroud)

当我运行它时,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
Run Code Online (Sandbox Code Playgroud)

Geo*_*iou 9

在 AWK 函数中sub替换一个/第一个实例。如果您替换subgsub应该替换所有实例。因此这应该可以正常工作:

sig=2.6
awk -v sig="$sig" '{
        gsub(/XSIGX/, sig);
        print;  

}' input.txt > output.txt
Run Code Online (Sandbox Code Playgroud)