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

标签 string bash awk replace

我有一个替换另一个文件中的字符串的 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/

相关文章:

c - 不使用/bin/bash保存环境变量

debugging - bash:调试选项和功能

bash - 使用 awk 写入多个文件

linux - 如何根据第 6 个字段内容 grep 行

linux - 文件转换和从 Linux 中的文件中删除特殊字符

c++ - 以下声明之间的区别

ruby - 如何在 Ruby 中打印\"

c++ - 在Windows窗体应用程序的点击功能中使用字符串

string - 首字母大写Lua

bash - 在 Bash 中比较多个文件