基于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
相关产品推荐
相关产品推荐

