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

如何用sed提取跨行指定字符串?优化命令清理冗余引号与换行

解决sed提取跨行目标字符串的问题

需求说明

需要提取CAKE_FROSTING("和",之间的字符串,若目标内容跨行,需移除换行及换行位置的引号,运行环境为Linux bash。

原命令

sed -En ':a;N;s/.*CAKE_FROSTING\(\n?\s*?"([^,]*).*/\1/p;ba' filesToCheck/* > result.txt

源文件内容(filesToCheck/file.h)

something
CAKE_FROSTING(
"is supreme", 
"[i][agree]") something else
something more
something else
CAKE_FROSTING(
"is."kinda" neat"
"in fact", 
"[i][agree]") something else
something more

当前输出(result.txt)

is supreme" 
is."kinda" neat"
"in fact" 

期望输出(result.txt)

is supreme
is."kinda" neat in fact

修正后的sed命令

sed -En ':a;N;/",/!ba;s/.*CAKE_FROSTING\(\s*"([\s\S]*?)",/\1/;s/\n"/ /g;p' filesToCheck/* > result.txt

修改说明

  • 调整跨行读取逻辑:使用:a;N;/",/!ba循环读取行,直到模式空间中包含终止符",,确保一次性捕获完整的跨行目标内容,避免分段输出。
  • 替换非贪婪匹配规则:用[\s\S]*?替代原命令的[^,]*,[\s\S]匹配任意字符(包括换行),*?实现非贪婪匹配,精准捕获从起始"到第一个",之间的所有内容,不会提前中断。
  • 移除跨行引号和换行:新增s/\n"/ /g,将跨行位置的\n"替换为空格,既移除了换行和多余引号,又保证内容连贯。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 18:15:39