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

如何使用Awk结合Yad替换配置文件中已有的gap_x参数值

解决方案

核心修改逻辑如下:

  • yad表单的多字段输出默认以|作为分隔符,需要先拆分输出内容提取gap_x新值
  • 丢弃原脚本中>>追加内容的逻辑,改用sed的就地编辑功能直接替换目标行

修改后的完整脚本:

#!/bin/bash

# 变量定义
fileloc="/home/jerry/scripts/widget"

# 先备份原文件
cp "$fileloc" "$fileloc.backup"

# 调用yad获取用户输入
widedit=$(yad --title="Linux Lite - Widget Editor" --borders=20 --text="All fileds <span font='Roboto Bold 12'>MUST</span> have a value:" --form \
--field="Gap X (0 - total monitor width span in pixels): ":NUM '!0..100000!1' \
--field="Gap Y (0 - total monitor height span in pixels): ":NUM '!0..100000!1' \
--field="Transparent (yes or no ):":CB yes!no! \
--button=gtk-apply:0)

# 拆分yad输出的三个字段,第一个就是gap_x的新值
IFS="|" read -r gap_x_new gap_y_new transparent_new <<< "$widedit"

# 替换文件中所有以gap_x开头的行的内容
# 如果你确定要替换的是第65行,把下面这行注释,用后面的第65行替换逻辑
sed -i "s/^gap_x .*/gap_x $gap_x_new/" "$fileloc"

# 确定仅替换第65行的话用下面这行
# sed -i "65c\gap_x $gap_x_new" "$fileloc"

# 如果你还要同步替换gap_y和transparent的配置,也可以加对应的sed语句,示例:
# sed -i "s/^gap_y .*/gap_y $gap_y_new/" "$fileloc"
# sed -i "s/^transparent .*/transparent $transparent_new/" "$fileloc"

exit 0

注意事项

  • sed -i是GNU sed的就地修改参数,你使用的Linux Lite默认带GNU sed,不需要额外调整
  • 脚本用$()代替了旧写法的反引号,可读性更高,也避免了嵌套转义问题
  • 所有变量都加了双引号包裹,避免路径或者值里有空格时执行出错

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.20 07:06:04