我正在研究从系统文件中读取电池信息的脚本。 我只需要从MAX_IBAT(mA)行获取电池总容量(3000):3000;并将其放入变量中。 这是我正在读取的文件的内容:
event.returnValue = true;
我尝试过的事情:
charging_source: NONE;
charging_enabled: 0;
overload: 0;
Percentage(%): 50;
Percentage_raw(%): 50;
gs_cable_impedance: 0
gs_R_cable_impedance: 0
gs_aicl_result: 0
batt_cycle_first_use: 2017/01/01/12:00:06
batt_cycle_level_raw: 26157;
batt_cycle_overheat(s): 0;
htc_extension: 0x0;
usb_overheat_state: 0;
USB_PWR_TEMP(degree): 304;
ISEN_VALUE_ADC: 228;
ISEN_VALUE: 0;
SOC(%): 27;
VBAT(mV): 3707;
IBAT(mA): 383;
IUSB(mA): 0;
MAX_IBAT(mA): 3000;
MAX_IUSB(mA): 0;
AICL_RESULT: 0
VBUS(uV): 0;
BATT_TEMP: 320;
HEALTH: 1;
BATT_PRESENT(bool): 1;
CHARGE_TYPE: 1;
CHARGE_DONE: 0;
USB_PRESENT: 0;
USB_ONLINE: 0;
CHARGER_TEMP: -1;
CHARGER_TEMP_MAX: 803;
CC_uAh: 889648;
USB_CMD_IL_REG: 0x00;
USBIN_CURRENT_LIMIT_CFG: 0x14;
USBIN_AICL_OPTIONS_CFG: 0xc4;
FAST_CHARGE_CURRENT_CFG: 0x78;
FG_BCL_LMH_STS1: 0x00;
答案 0 :(得分:1)
这使用“:”和“;”作为字段分隔符:
max_ibat=$(awk -F ': |;' '$1=="MAX_IBAT(mA)" {print $2}' file)
echo "$max_ibat"
输出:
3000
答案 1 :(得分:1)
grep
解决方案:
-o
打印确切的输出而不是整行(?<=MAX_IBAT\(mA\):\s)
在断言后面查找,以仅打印以字符串'MAX_IBAT(mA):'命令:
max_ibat=$(grep -oP '(?<=MAX_IBAT\(mA\):\s)\d+' Input_file)
echo "$max_ibat"
输出:
3000
sed
解决方案:
-n
静默模式->默认情况下不打印/^MAX_IBAT(mA):/
仅处理以MAX_IBAT(mA):
开头的行/s/[^0-9]//gp
用数字替换所有不是数字的字符(删除它们),然后用p
打印。命令:
max_ibat=$(sed -n '/^MAX_IBAT(mA):/s/[^0-9]//gp' Input_file)
echo "$max_ibat"
输出:
3000