You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Awk替换以§和¨分隔的多行代码块

用Awk替换Bash脚本头部指定块内容

问题说明

你的Bash脚本头部代码如下:

#!/bin/bash
#
#####################################
#                                   #
#   {config_}                       #
#                                   #
#   ~/this_is_a very_very_very_long_filename
#                                   #
#   INSTALL VERSION                 #
#                                   #
#   §2023_06_18§                    #
#                                   #
#   ¨version:50-0-1¨                #
#                                   #
#   ɸmodif_version:1-0-3ɸ           #
#                                   #
#####################################
#
# Applications configuration files
#
########################################################
#
#
#
########################################################
#

需要替换从第一个§开始,到第二个¨结束的代码块:
原块内容:

§2023_06_18§                    #
    #                                   #
    #   ¨version:39-0-10¨

替换为:

§2024_07_18§                    #
    #                                   #
    #   ¨version:43-1-00¨

Awk解决方案

以下是直接可用的Awk命令,逻辑清晰易懂:

awk '
BEGIN {
    in_block = 0
    count_delim = 0
    # 预存替换后的新内容,按行对应
    new_content[1] = "        §2024_07_18§                    #"
    new_content[2] = "    #                                   #"
    new_content[3] = "    #   ¨version:43-1-00¨"
}
# 触发进入目标块:匹配第一个§
/§/ && count_delim == 0 {
    in_block = 1
    count_delim++
    print new_content[1]
    next
}
# 触发退出目标块:块内匹配到第二个¨
in_block && /¨/ {
    count_delim++
    print new_content[3]
    in_block = 0
    count_delim = 0
    next
}
# 块内的中间行,输出对应新内容
in_block {
    print new_content[2]
    next
}
# 非块内容直接输出
1' your_script.sh > updated_script.sh

脚本逻辑解释

  1. 初始化(BEGIN段):设置标记变量in_block(是否在目标块内)、count_delim(分隔符计数),同时把要替换的三行内容存在数组里。
  2. 进入块:当第一次匹配到§时,切换到块内模式,直接输出新内容的第一行,跳过原行。
  3. 块内中间行:处于块内时,输出新内容的第二行,跳过原行。
  4. 退出块:在块内匹配到¨时,输出新内容的第三行,退出块内模式,跳过原行。
  5. 其他行:最后一行的1是Awk的简写,表示所有非块内的行直接原样输出。

使用方法

  • 把命令中的your_script.sh替换成你实际的脚本文件名。
  • 执行命令后,会生成更新后的脚本updated_script.sh,先检查内容无误后,再替换原文件即可。

内容的提问来源于stack exchange,提问作者jcdole

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 13:27:17