如何使用grep提取双引号包裹的字符串 适配C文件批量提取场景
grep提取C文件双引号包裹字符串操作方法
可以通过grep工具实现需求,以下是不同场景的具体实现命令:
场景1:仅输出包含双引号字符串的完整行
如果只需要定位所有包含字符串常量的.c文件对应行,使用以下命令:
grep -r --include="*.c" '"[^"\\]*(?:\\.[^"\\]*)*"' ./
输出格式默认是「文件路径:匹配行内容」,添加-n参数可额外输出行号方便定位。
场景2:同时输出完整行和提取的字符串内容
如果需要同时拿到所在行信息和双引号包裹的字符串本身,使用以下命令:
grep -rnP --include="*.c" '"[^"\\]*(?:\\.[^"\\]*)*"' ./ | awk -F: '{ print "文件路径:"$1 print "行号:"$2 print "完整行内容:"$0 match($0, /"([^"\\]*(?:\\.[^"\\]*)*)"/, res) print "提取到的字符串:"res[1] print "-------------------------" }'
常用参数说明
-r:递归搜索当前目录下的所有子目录文件,若仅需处理当前目录的.c文件可删除该参数,将命令末尾的./替换为*.c--include="*.c":限定仅搜索后缀为.c的源文件,过滤其他类型文件提升搜索效率-P:启用Perl兼容正则,支持处理转义双引号这类复杂匹配规则-n:输出匹配内容的行号
注意事项
- 上述命令的正则默认适配C语言转义规则,不会把字符串内部的
\"转义字符误判为字符串结束标记 - 如果你确认所有待处理文件没有转义双引号,可以将正则简化为
"[^"]*",获得更高的搜索效率
内容的提问来源于stack exchange,提问作者Justanotherdev
相关产品推荐
相关产品推荐

