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

如何使用awk或sed将file1每行内容插入到file2命令行指定位置

实现方法

直接用awk处理双文件是最简洁稳定的方案,可自动兼容带引号、含空格的条目,不需要额外转义处理。

awk 实现命令

awk '
NR==FNR {
    gsub(/^[[:space:]]+|[[:space:]]+$/, "", $0)
    if ($0 != "") entries[++n] = $0
    next
}
{
    for (i=1; i<=n; i++) {
        print gensub(/(name)[[:space:]]+(devices)/, "\\1 " entries[i] " \\2", "g", $0)
    }
    print ""
}
' file1 file2 > result.txt

命令逻辑说明

  • 读取第一个输入文件file1时,自动清理每行首尾多余空格、跳过空行,将所有有效条目(包括带引号含空格的内容)完整存入数组,不会因为空格拆分条目。
  • 读取第二个输入文件file2时,遍历所有存好的file1条目,将条目插入到每行命令的name与devices字段之间,完整保留原命令的缩进、设备编号等内容。
  • 每处理完一个条目对应的4行命令,自动输出空行做分隔,和示例输出格式一致;如果不需要空行分隔,删掉命令中单独的print ""行即可。

sed 实现方案

sed本身不支持直接存储跨文件的多组内容,需要先基于file1生成临时替换脚本,再批量处理file2:

# 生成临时sed替换规则
sed -e 's/[[:space:]]*$//' -e '/^$/d' -e 's/^[[:space:]]*/s|name devices|name /' -e 's/$/ devices|/' file1 > temp_rule.sed
# 执行替换生成结果
sed -f temp_rule.sed file2 > result.txt
# 清理临时文件
rm temp_rule.sed

注意:以上两个命令都可以正确识别带引号的含空格条目,不会出现内容拆分错误,执行完成后结果会写入当前目录下的result.txt文件。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 09:39:57