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

基于Bash脚本提取IBM i CLLE文件中跨多行TEXT内容

提取IBM i CLLE文件中TEXT('...')内容的Bash脚本方案

核心思路

先处理CLLE的续行符+,将跨多行的TEXT命令拼接为完整行,再精准提取TEXT('...')包裹的内容,同时保留原文本中的单引号(处理CLLE中用''转义单引号的规则)、双引号及括号等特殊字符。

实现命令

直接在Bash脚本中用awk完成提取并赋值给变量$SRCTEXT:

SRCTEXT=$(awk '
# 处理CLLE续行符:拼接以+结尾的行
{
    while (sub(/\+$/, "")) {
        getline next_line
        $0 = $0 next_line
    }
}
# 匹配并提取TEXT('...')内的内容
/TEXT\(/ {
    # 捕获单引号包裹的内容,允许出现转义的双单引号''
    match($0, /TEXT\('([^\']|'')*'\)/, capture)
    if (capture[1] != "") {
        # 将CLLE转义的''还原为单个'
        gsub(/''/, "'", capture[1])
        print capture[1]
    }
    # 若仅需提取第一个TEXT内容,取消下一行注释
    # exit
}
' "$CURFILEPATH")

关键细节说明

  • 续行处理:通过循环检查行尾的+,去掉续行符后读取下一行拼接,确保跨多行的TEXT命令被合并为一行,避免提取中断。
  • 特殊字符兼容:正则表达式/TEXT\('([^\']|'')*'\)/允许TEXT内容中出现除未转义单引号外的任意字符,包括双引号、括号等,同时兼容CLLE中用''表示单个'的转义规则。
  • 结果还原:用gsub把捕获内容中的''替换为',还原原始文本的单引号格式。

可选调整

  • 如果目标文件中有多个TEXT('...')条目,默认会输出所有内容;若仅需提取第一个,取消代码中exit的注释即可。
  • 若需要保留CLLE中的''转义格式,去掉gsub(/''/, "'", capture[1])这一行即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 00:47:12