如何使用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
相关产品推荐
相关产品推荐

