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

如何用正则仅修改多行文本中的USERLIST区块格式?

解决方案

Perl 实现

直接用 Perl 的多行模式读取整个文件,通过正则匹配并替换 USERLIST 区块:

perl -0777 -pe 's/USERLIST\s*\(\s*(.*?)\s*\)/USERLIST($1)/s; s/"\s*"/", "/g' input.txt

说明:

  1. -0777:让 Perl 一次性读取整个文件内容,解决多行匹配问题。
  2. 第一个替换:匹配 USERLIST ( 开头、) 结尾的区块,把中间内容(非贪婪匹配)提取后放到 USERLIST() 中,/s 修饰符允许 . 匹配换行符。
  3. 第二个替换:将区块内的引号加换行/空格的组合,替换成 ", ",实现元素间的逗号分隔。

GNU Sed 实现

大部分 Linux 系统默认的 GNU Sed 支持多行匹配,可通过以下命令实现:

sed -n '
/USERLIST (/ {
    :loop
    N
    /)/! b loop
    s/\n\s*/ /g
    s/USERLIST ( /USERLIST(/
    s/ "/", "/g
    s/ )/)/
    p
    b
}
p' input.txt

说明:

  1. /USERLIST (/:定位到 USERLIST 区块的起始行。
  2. :loop 和 N:循环读取后续行,直到遇到闭合括号 )。
  3. s/\n\s*/ /g:把区块内的换行和多余空格替换成单个空格。
  4. 后续几个替换分别处理括号前后的冗余空格、元素间的分隔格式,最终生成单行的 USERLIST 结构。
  5. 非 USERLIST 区块的行直接输出,保证 ROLELIST 等内容完全不变。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 01:11:08