三行代码  ›  专栏  ›  技术社区  ›  John

如何通过Ubuntu16.04上的gawk将以alg::switch_key_开头的字符串替换为alg:?

  •  0
  • John  · 技术社区  · 3 周前

    正如标题中所说,我想替换 alg::switch_key_hash alg::dms::switch_key_hash , alg::switch_key_sort alg::dms::switch_key_sort 等等 awk 实际使用 gawk 在里面 Ubuntu16.04

    1 回复  |  直到 3 周前
        1
  •  1
  •   Ninja    3 周前

    要使用gawk(GNU awk)将以alg::switch_key_开头的字符串替换为alg:;dms::switch_key_,可以使用gsub函数,该函数对每个输入记录执行全局替换。以下是您的操作方法:

    gawk '{gsub(/alg::switch_key_/, "alg::dms::switch_key_"); print}' inputfile
    

    该命令将从inputfile中读取,用alg::dms:switch_key_替换所有出现的alg:;switch_key__,然后打印修改后的行。

    如果要对多个文件执行此替换并覆盖它们,可以在shell中使用循环。例如:

    for file in *.txt; do
        gawk -i inplace '{gsub(/alg::switch_key_/, "alg::dms::switch_key_"); print}' "$file"
    done
    

    这将处理当前目录中的每个.txt文件,并根据需要替换指定的字符串。-i就地选项告诉gawk就地编辑文件。

    如果不想覆盖原始文件,可以将输出重定向到新文件:

    for file in *.txt; do
        gawk '{gsub(/alg::switch_key_/, "alg::dms::switch_key_"); print}' "$file" > "${file}.new"
    done
    

    这将创建与原始文件同名但名称后附加.new的新文件。

    我希望这能有所帮助!