如何使用grep匹配内容并在同一行输出?——提取文件中MD5哈希与邮箱地址并同行展示的方法
提取同一行的邮箱与MD5哈希并配对输出
我来帮你搞定这个问题!你的需求是从每行以|分隔的文本里,把对应位置的邮箱和MD5哈希值配对,输出成邮箱::MD5的格式对吧?下面给你几个实用的方案:
方案1:用awk(最快捷的命令行工具)
awk是处理这种结构化文本的利器,直接指定分隔符为|,然后提取对应字段就行。你的每行里,MD5在第3个字段(去掉引号),邮箱在第4个字段(去掉引号),命令如下:
awk -F"|" '{gsub(/'\''/,"",$3); gsub(/'\''/,"",$4); print $4"::"$3}' file.txt
简单解释:
-F"|":把|设为字段分隔符gsub(/'\''/,"",$3):清除第3个字段里的单引号gsub(/'\''/,"",$4):清除第4个字段里的单引号print $4"::"$3:按邮箱::MD5的格式输出对应内容
方案2:用sed(正则匹配替换)
如果习惯用sed,也可以通过正则捕获组精准提取内容:
sed -E "s/.*'([a-f0-9]{32})'\|'([^']+)'/\2::\1/g" file.txt
简单解释:
-E:启用扩展正则表达式,让捕获组语法更简洁- 正则
.*'([a-f0-9]{32})'\|'([^']+)':精准捕获32位的MD5哈希值,以及紧随其后的邮箱地址 \2::\1:把捕获到的邮箱(第2组)和MD5(第1组)按目标格式替换输出
方案3:用Python脚本(灵活定制)
如果需要更复杂的逻辑或者可复用的脚本,用Python实现也很轻松:
import re with open('file.txt', 'r') as f: for line in f: # 匹配每行中的MD5哈希和对应邮箱 match_result = re.search(r"'([a-f0-9]{32})'\|'([^']+)'", line) if match_result: md5_hash = match_result.group(1) email = match_result.group(2) print(f"{email}::{md5_hash}")
这个脚本会逐行读取文件,用正则精准捕获目标内容,然后按要求格式打印输出。
测试你的示例输入,三个方案都会输出:
test@test.com::202cb962ac59075b964b07152d234b70 another@test.com::202cb962ac59075b964b07152d234b70
内容的提问来源于stack exchange,提问作者noob0t
相关产品推荐
相关产品推荐

