【问题标题】:awk replace all occurrences of a string globallyawk 全局替换所有出现的字符串
【发布时间】:2017-06-21 07:03:53
【问题描述】:

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

【问题讨论】:

  • AFAIK sub 替换一个, gsub 替换所有。你试过 gsub 吗?
  • @GeorgeVasiliou 我不知道 gsub。非常感谢——如果你发布一个快速的答案,我会接受。

标签: string bash awk replace


【解决方案1】:

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

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

}' input.txt > output.txt

【讨论】:

    猜你喜欢
    • 2019-01-10
    • 2018-07-11
    • 2014-08-05
    • 2012-08-01
    • 2020-10-29
    • 2011-02-23
    • 1970-01-01
    • 2012-05-20
    • 1970-01-01
    相关资源
    最近更新 更多