Linux 在两个逗号之间获取数据

Linux 在两个逗号之间获取数据,linux,bash,sed,Linux,Bash,Sed,我正在编写一个简单的脚本,从acpi获取电池信息,以便格式化和输出电池信息 目前,我正在使用cut获取此信息,但随着电池状态的变化,cut不会获取正确的数据,而是会获取字符串的一部分,而不是电池百分比 运行acpi-b时,我得到以下输出: Battery 0: Unknown, 100 有时,acpi-b也会返回以下信息,或者在充电或放电时返回类似信息: Battery 0: Discharging, 98%, 02:14:14 remaining 因此,在不使用cut的情况下,我希望能够获

我正在编写一个简单的脚本,从
acpi
获取电池信息,以便格式化和输出电池信息

目前,我正在使用
cut
获取此信息,但随着电池状态的变化,
cut
不会获取正确的数据,而是会获取字符串的一部分,而不是电池百分比

运行
acpi-b
时,我得到以下输出:

Battery 0: Unknown, 100
有时,
acpi-b
也会返回以下信息,或者在充电或放电时返回类似信息:

Battery 0: Discharging, 98%, 02:14:14 remaining
因此,在不使用
cut
的情况下,我希望能够获取第一个逗号之后的数据,并且,在出现逗号时,能够获取两个逗号之间的信息。现在,我正在使用sed从输出中去除空格和百分号。这是命令:

acpi -b | cut -c20-24 | sed 's/ //g;s/%//g'

您可以使用以下简单的awk命令:

s='Battery 0: Unknown, 100'
awk -F',[[:blank:]]*' '{sub(/%/, "", $2); print $2}' <<< "$s"
100

s='Battery 0: Discharging, 98%, 02:14:14 remaining'
awk -F',[[:blank:]]*' '{sub(/%/, "", $2); print $2}' <<< "$s"
98
对于sed:

$ str1='Battery 0: Unknown, 100'
$ str2='Battery 0: Discharging, 98%, 02:14:14 remaining'
$ sed 's/^[^,]*, \([0-9]*\).*$/\1/' <<< "$str1"
100
$ sed 's/^[^,]*, \([0-9]*\).*$/\1/' <<< "$str2"
98
$str1='0号电池:未知,100'
$str2='0号电池:放电,98%,02:14:14剩余'

$sed的/^[^,]*,\([0-9]*\).$/\1/”而不是计数字符;计数字段:
cut-d,-f2
。这将在percentage.echo-e“电池0:未知,100\n电池0:放电,98%,02:14:14剩余的”sed“s/[[:blank:][]*///g“| cut-d',”-f2谢谢!这很有效,但我对awk不太熟悉,所以我使用了上面所示的cut建议。我的答案基于您的要求,因此,在不使用cut的情况下,我希望能够在第一个逗号后获取数据,此外,
cut
将在awk在我的命令中负责的输出中的数字之前留下一个前导空格。您能解释一下awk是如何处理的吗处理这个?我理解这在sed中是如何工作的,因为我在脚本中有一个管道命令,执行所有这些操作,然后将输出保存为变量,但我不确定awk如何处理删除空格或百分号。我在回答中添加了解释。再次感谢!这将帮助我更好地将awk整合到我的日常脚本中。
$ str1='Battery 0: Unknown, 100'
$ str2='Battery 0: Discharging, 98%, 02:14:14 remaining'
$ sed 's/^[^,]*, \([0-9]*\).*$/\1/' <<< "$str1"
100
$ sed 's/^[^,]*, \([0-9]*\).*$/\1/' <<< "$str2"
98