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

如何用部分字符串搜索保存完整字符串为变量,实现配置替换与数字验证

解决方案

1. 提取目标字符串到变量var1

假设你的配置文件名为config.txt,以day变量为例,通过grep匹配目标行后,用sed剥离多余的引号和set前缀,得到你需要的current_day=24格式字符串:

# 以day变量为例,提取目标字符串到var1
var1=$(grep "$day" config.txt | sed -E 's/^"set (.*)"$/\1/')
# 验证结果
echo "$var1"  # 输出:current_day=24

2. 处理用户输入:验证并移除前导零

先提示用户输入新数字,再通过两种方式处理前导零,同时验证输入有效性:

方式1:用sed移除前导零(兼容所有环境)

read -p "请输入新的日期数字:" new_num

# 移除前导零:0024 → 24,0 → 空(若需保留0可调整正则为s/^0+([0-9])/\1/)
new_num=$(echo "$new_num" | sed -E 's/^0+([0-9]+)$/\1/; s/^0$//')

# 验证输入是否为纯数字
if ! [[ "$new_num" =~ ^[0-9]+$ ]]; then
    echo "错误:请输入有效的正整数!"
    exit 1
fi

# 生成新的键值对
new_var="${day}${new_num}"
echo "$new_var"  # 输出:current_day=10(假设输入10)

方式2:用Bash算术扩展(更高效,无需外部命令)

read -p "请输入新的日期数字:" new_num

# 用10进制强制转换移除前导零,0024 → 24,0 → 0
if ! [[ "$new_num" =~ ^[0-9]+$ ]]; then
    echo "错误:请输入有效的正整数!"
    exit 1
fi
new_num=$((10#$new_num))

# 生成新的键值对
new_var="${day}${new_num}"

3. 替换文件中的原内容

用sed批量替换文件中的旧字符串为新字符串:

# Linux环境下的sed
sed -i "s/$var1/$new_var/" config.txt

# macOS环境下的sed(需要加空参数)
sed -i "" "s/$var1/$new_var/" config.txt

批量处理三个变量的示例

如果要同时处理day、month、year三个变量,可以封装成循环:

#!/bin/bash
file="config.txt"
vars=("day" "month" "year")

for var_name in "${vars[@]}"; do
    # 获取变量值(比如day对应current_day=)
    key="${!var_name}"
    # 提取原字符串
    old_str=$(grep "$key" "$file" | sed -E 's/^"set (.*)"$/\1/')
    # 提示输入
    read -p "请输入新的${var_name}数字:" new_num
    # 处理前导零并验证
    if ! [[ "$new_num" =~ ^[0-9]+$ ]]; then
        echo "错误:请输入有效的正整数!"
        exit 1
    fi
    new_num=$((10#$new_num))
    # 生成新字符串
    new_str="${key}${new_num}"
    # 替换文件
    sed -i "s/$old_str/$new_str/" "$file"
done

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 12:56:32