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

时间:2015-01-08 20:46:44

标签: linux shell recursion

我希望在当前目录中的所有文件中递归搜索并解压缩,对于任何以" B-0 "开头的字符串然后是任意数字的数字

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

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

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

等待建议?

感谢。

2 个答案:

答案 0 :(得分:1)

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

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

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

但是grep会在单独的一行打印每个结果。我将结果汇总到tr以用逗号替换换行符。

答案 1 :(得分:1)

您可以使用此grepsorttr组合:

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

grep选项是:

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