在 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
以用逗号替换换行符。
您可以使用此 grep
、sort
、tr
组合:
FINAL_STRING=$(grep -rIhEo '\bB-0[[:digit:]]*' . | sort -u | tr '\n' ',')
echo "${FINAL_STRING%,*}"
grep
使用的选项是:
r
- 递归
I
- 忽略二进制文件
h
- 在输出中省略文件名
E
- 扩展正则表达式
o
- 只打印匹配的输出
我想在我当前目录中的所有文件中递归地搜索和提取,对于任何以“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
以用逗号替换换行符。
您可以使用此 grep
、sort
、tr
组合:
FINAL_STRING=$(grep -rIhEo '\bB-0[[:digit:]]*' . | sort -u | tr '\n' ',')
echo "${FINAL_STRING%,*}"
grep
使用的选项是:
r
- 递归I
- 忽略二进制文件h
- 在输出中省略文件名E
- 扩展正则表达式o
- 只打印匹配的输出