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

如何在指定目录的.cfg文件中提取含$DB_Connection=的行?

提取.cfg文件中含$DB_Connection=行的正确命令

问题背景

需要从/usr/prod目录下的大量.cfg文件中提取所有包含$DB_Connection=的行,输出格式为「文件名:行号:完整行内容」,但原命令无有效输出:

find /usr/prod/*.cfg -type f -print0 | xargs -0 grep -Hn -A0 "$DB_Connection=" > /home/userId/outputconnections.txt

错误原因

  1. 特殊字符未转义:$在Shell中是变量引用符号,双引号包裹的$DB_Connection=会被Shell解析为变量DB_Connection的值(未定义则为空),导致grep实际匹配的是=而非目标字符串。
  2. find语法错误:find /usr/prod/*.cfg会让Shell先展开通配符,若文件数量过多会触发系统限制,且不符合find的标准用法。

正确命令

方式1:直接用grep(非递归,仅处理/usr/prod下的.cfg文件)

grep -Hn '$DB_Connection=' /usr/prod/*.cfg > /home/userId/outputconnections.txt

参数说明:

  • -H:强制显示文件名(即使只搜索单个文件)
  • -n:显示匹配行的行号
  • 单引号包裹匹配模式,避免Shell解析$符号

方式2:grep递归搜索(含子目录)

如果需要处理/usr/prod下所有子目录中的.cfg文件,添加递归参数:

grep -rHn '$DB_Connection=' /usr/prod --include="*.cfg" > /home/userId/outputconnections.txt

参数说明:

  • -r:递归搜索子目录
  • --include="*.cfg":仅匹配.cfg后缀的文件,避免搜索其他类型文件

方式3:find+xargs组合(兼容特殊文件名)

如果文件名包含空格、换行等特殊字符,用find的-print0和xargs的-0处理:

find /usr/prod -type f -name "*.cfg" -print0 | xargs -0 grep -Hn '$DB_Connection=' > /home/userId/outputconnections.txt

输出效果

对示例文件执行后,会生成符合要求的输出:

/usr/prod/File1.cfg:2:$DB_Connection=ABC_DATABASE
/usr/prod/File2.cfg:2:$DB_Connection=SAMPLE_DATABASE

空文件或不含目标字符串的文件会被自动忽略。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 14:30:53