我希望在当前目录中的所有文件中递归搜索并解压缩,对于任何以" B-0 "开头的字符串然后是任意数字的数字。
如果找到匹配项,我想提取它。但同时,我想提取独特的字符串。例如 - 搜索可能会在2个文件中找到B-05255。所以我想只提取一次B-05255(唯一)。
搜索完成后,我想将所有字符串分配到一个最后的字符串逗号分隔为:
FINAL_STRING = B-05255,B-05256,B-04152
等待建议?
感谢。
答案 0 :(得分:1)
您可以使用选项-r
(递归):
GREP_OPTIONS="" /bin/grep -ohr '\bB-0[0-9]*' . | tr $'\n' ','
这通过当前目录递归迭代,并在每个文件中搜索模式。选项-o
仅提取匹配的字符串(不是整行)。请注意,我使用了代表字边界的转义序列\b
(因为你说:" ......以......&#34开头; )
但是grep
会在单独的一行打印每个结果。我将结果汇总到tr
以用逗号替换换行符。
答案 1 :(得分:1)
您可以使用此grep
,sort
,tr
组合:
FINAL_STRING=$(grep -rIhEo '\bB-0[[:digit:]]*' . | sort -u | tr '\n' ',')
echo "${FINAL_STRING%,*}"
使用的 grep
选项是:
r
- 递归I
- 忽略二进制文件h
- 在输出中省略文件名E
- 扩展正则表达式o
- 仅打印匹配的输出