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

Shell脚本实现:检查文件数组并将元素添加至数组内

解决Shell脚本向指定数组首行添加元素的问题

问题描述

需要编写Shell脚本实现以下逻辑:

  • 检查文件a.txt中是否存在fs.m数组定义
  • 若不存在:创建该数组并添加元素xyz
  • 若存在:将xyz添加至数组内部的首行(即数组起始行的下一行)

当前使用的脚本会将xyz追加到文件末尾,无法满足需求。

原文件示例

fs.m = [
 abc,
]

期望结果

fs.m = [
 xyz,
 abc,
]

错误脚本代码

#!/bin/bash

if grep -A1 -qE '^fs.m *= *\[' a.txt; then
    echo -e "xyz," >> a.txt
else
    echo -e 'fs.m = [' >> a.txt
    echo -e "xyz," >> a.txt
    echo -e "]" >> a.txt
fi

错误执行结果

fs.m = [
 abc,
]
xyz

解决方案

使用sed命令定位数组起始行并插入内容,替代直接追加到文件末尾的逻辑。修改后的脚本如下:

#!/bin/bash

# 检查fs.m数组定义是否存在
if grep -qE '^fs.m *= *\[' a.txt; then
    # 在数组起始行的下一行插入xyz,
    # 注意:macOS(BSD sed)需改为 sed -i '' '/^fs.m *= *\[$/a\ xyz,' a.txt
    sed -i '/^fs.m *= *\[$/a\ xyz,' a.txt
else
    # 不存在则创建完整的数组结构
    cat >> a.txt <<EOF
fs.m = [
 xyz,
]
EOF
fi

代码说明

  1. 检测数组存在性:使用grep -qE静默匹配fs.m = [的定义行,-q参数仅返回匹配状态,不输出内容
  2. 插入元素到数组首行:
    • sed -i实现原地修改文件
    • 正则/^fs.m *= *\[$/精准匹配数组起始行(行首到行尾的fs.m = [,允许等号前后有空格)
    • a\命令在匹配行的下一行插入指定内容 xyz,
  3. 创建新数组:使用Here Document(<<EOF)批量写入数组结构,比多次echo更简洁易维护

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 12:40:28