在 Linux 中使用 shell 脚本从当前目录中的文件递归搜索和提取子字符串?

Recursively search and extract substring from files in current dir using shell scripting in Linux?

我想在我当前目录中的所有文件中递归地搜索和提取,对于任何以“B-0开头的字符串" 后跟 任意位数

如果找到匹配项,我想提取它。但是同时,我想提取唯一的字符串。例如 - 搜索可能会在 2 个文件中找到 B-05255。所以我只想提取一次 B-05255(唯一)。

搜索完成后,我想将所有字符串分配到最后一个字符串,逗号分隔为:

FINAL_STRING = B-05255,B-05256,B-04152

正在等待建议?

谢谢。

您可以使用选项 -r(递归):

GREP_OPTIONS="" /bin/grep -ohr '\bB-0[0-9]*' . | tr $'\n' ','

这递归遍历当前目录并在每个文件中搜索模式。选项 -o 仅提取匹配的字符串(而不是整行)。请注意,我使用的转义序列 \b 代表 字边界 (因为你说:“...以...开头”)

但是 grep 将在单独的行上打印每个结果。我将结果传送到 tr 以用逗号替换换行符。

您可以使用此 grepsorttr 组合:

FINAL_STRING=$(grep -rIhEo '\bB-0[[:digit:]]*' . | sort -u | tr '\n' ',')
echo "${FINAL_STRING%,*}"

grep 使用的选项是:

  • r - 递归
  • I - 忽略二进制文件
  • h - 在输出中省略文件名
  • E - 扩展正则表达式
  • o - 只打印匹配的输出