You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用sed基于File2更新File1中的SHA256校验值?

解决方法

问题根源

你循环调用sed处理File2的每一行,每次都会完整读取并输出整个File1,155次循环自然会生成155倍原File1行数的重复内容,这就是核心问题。

正确实现方式

方式一:生成sed批量替换脚本,一次性处理

先把File2的内容转换成sed能识别的替换命令,再用这个脚本一次性处理File1,避免重复遍历:

# 从File2生成sed替换脚本
sed 's/^\(.*\) \(.*\)/s|^\([^ ]* [^ ]* [^ ]* \)\1 .*|\1\2|/' File2 > replace.sed
# 用生成的脚本处理File1,输出到新文件
sed -f replace.sed File1 > new_File1
  • 第一行命令的作用:把File2里每行的文件路径 新SHA256值,转换成sed的替换规则——匹配File1中以权限 用户 组 文件路径 开头的行,把末尾的旧SHA256值替换成新值。这里用|作为分隔符,避免路径里的/导致替换规则失效。
  • 第二行直接调用生成的脚本处理File1,只会输出一次处理后的内容,不会重复。

方式二:用awk高效处理(推荐大文件场景)

awk天生适合处理这种多文件关联的替换操作,代码更简洁,效率也更高:

awk 'NR==FNR {sha[$1]=$2; next} {if ($4 in sha) $5=sha[$4]; print}' File2 File1 > new_File1
  • 处理第一个文件(File2)时,把文件路径作为键,新SHA256值作为值,存入数组sha。
  • 处理第二个文件(File1)时,检查第4列(文件路径)是否在sha数组里,如果存在,就把第5列(旧SHA256值)替换成新值,最后打印整行。

特殊场景处理:文件路径含空格

如果你的文件路径包含空格,上面的字段分割方式会出错,可以用awk指定分隔符来处理:
假设File1格式是权限 用户 组 "带空格的文件路径" SHA256值,File2格式是"带空格的文件路径" 新SHA256值,可以用以下命令:

awk -F'"' 'NR==FNR {path=$2; sha[path]=$4; next} {if ($2 in sha) {sub(/[^ ]*$/, sha[$2])}; print}' File2 File1 > new_File1

内容的提问来源于stack exchange,提问作者Kerkael Belarpaillon

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 02:12:19