sed替换一行中key=value,将value替换为新值,不管value是什么值
时间: 2023-12-03 09:45:58 浏览: 117
可以使用sed命令结合正则表达式来实现这个操作。假设要将文件中所有行中key为"foo"的value替换为"bar",可以使用以下命令:
```
sed -i 's/\(^foo=\).*/\1bar/' filename
```
其中,-i选项表示直接修改文件,不输出到标准输出。正则表达式中,\(^foo=\)表示匹配以"foo="开头的字符串,并将其保存到\1中;.*表示匹配任意数量的字符。替换部分中,\1bar表示将保存在\1中的字符串替换为"bar"。
如果要替换的key和value不是固定的,可以将命令中的"foo"和"bar"替换为相应的变量。例如,假设要将文件中所有行中key为$KEY的value替换为$NEW_VALUE,可以使用以下命令:
```
sed -i "s/\(^$KEY=\).*/\1$NEW_VALUE/" filename
```
其中,双引号中的变量会被扩展成相应的值。
相关问题
#!/bin/sh operate=$1 file=$2 section=$3 key=$4 value=$5 # 读取 ini 文件中的值 get_ini_value() { section=$1 key=$2 awk -F '=' "/\[$section\]/{a=1} (a==1 && \"$key\"==\$1){print \$2;exit}" $file } # 设置 ini 文件中的值 set_ini_value() { section=$1 key=$2 value=$(echo "$value" | sed 's/[\/&]/\\&/g') # 对 $value 进行转义 awk -F '=' "/\[$section\]/{a=1} (a==1 && \"$key\"==\$1){\$2=\"$value\"; print} (a==1 && /^\[/){a=0} {print}" $file > tmp.ini mv tmp.ini $file } if [[ $operate == "get" ]]; then val=$(get_ini_value $section $key) echo $val else set_ini_value $section $key $value echo 'update success' fi
这是一个 Shell 脚本,用于读取和设置 ini 文件中的值。脚本接受五个参数:操作(get 或 set)、文件名、节名、键名和键值。如果操作为 get,则读取对应 ini 文件中指定节和键的值并输出;如果操作为 set,则设置对应 ini 文件中指定节和键的值为给定的键值,并输出更新成功的信息。
具体实现时,使用 awk 命令读取 ini 文件,通过匹配节名和键名来获取或设置对应的键值。其中,set 操作需要对给定的键值进行转义处理,以避免出现特殊字符导致的错误。最后,将修改后的内容写回原文件中。
#! /system/bin/sh # 监听按键的设备文件和按键值 DEVICE_FILE="/dev/input/event0" KEY_VALUE="00a5" # 按键值对应的名称 KEY_NAME="KEY_PREVIOUSSONG" # 按键状态枚举值 KEY_STATE_DOWN="down" KEY_STATE_UP="up" DISPLAY_ID=$(dumpsys window | awk '/displayId=/ {print $1}' | sed 's/displayId=//g') local dis=$(echo "$DISPLAY_ID" | awk '{print $2}') echo $dis # 输出按键状态信息 function log_key_state() { local state=$1 local message="Button $KEY_NAME is $state." echo "$message" am start --display $dis com.tencent.start.tv } # 监听按键事件 function listen_key_events() { # 判断设备文件是否存在 if [ ! -e "$DEVICE_FILE" ]; then echo "Error: Device file '$DEVICE_FILE' does not exist." exit 1 fi # 监听按键事件 getevent -q "$DEVICE_FILE" | while read line; do local keycode=$(echo "$line" | awk '{print $2}') local value=$(echo "$line" | awk '{print $3}') if [ "$keycode" = "$KEY_VALUE" ]; then if [ "$value" = "00000001" ]; then log_key_state "$KEY_STATE_DOWN" #elif [ "$value" = "00000000" ]; then #log_key_state "$KEY_STATE_UP" fi fi done } # 启动按键监听 listen_key_events 找出错误点
这段代码的作用是监听设备文件 "/dev/input/event0" 上的按键事件,当按键值为 "00a5" 时,输出按键状态信息并启动名为 "com.tencent.start.tv" 的应用程序。其中,按键值 "00a5" 对应的按键名称为 "KEY_PREVIOUSSONG",按键状态枚举值包括 "down" 和 "up"。另外,该代码还获取了当前窗口的显示 ID 并输出了该 ID。
至于代码中可能存在的错误点,需要根据具体情况进行分析和排查。如果该代码无法正常工作,可以考虑检查以下几个方面:
1. 确认设备文件 "/dev/input/event0" 存在且有读取权限;
2. 确认按键值 "00a5" 对应的按键名称和状态枚举值是否正确;
3. 确认启动的应用程序包名和界面名称是否正确;
4. 确认当前窗口的显示 ID 是否正确获取。
阅读全文