【问题标题】:Parse Linux command output解析 Linux 命令输出
【发布时间】:2014-01-14 18:42:11
【问题描述】:

对于命令, amixer get PCM playback

我得到这样的输出:

 "Simple mixer control 'PCM',0
  Capabilities: pvolume penum
  Playback channels: Front Left - Front Right
  Limits: Playback 0 - 255
  Mono:
  Front Left: Playback 255 [100%] [0.00dB]
  Front Right: Playback 255 [100%] [0.00dB]"

现在我需要变量中的值“100%”;那么,我该如何解析呢?

我收到了[100

amixer get PCM playback | grep "\[" | cut -d '%' -f1 | awk '{print $5}'

【问题讨论】:

  • 首先,有两个100%号码;你想要哪个?如果他们总是100%,那么你可以简单地分配var=100,所以大概他们有时会小于100%。看起来有点像sed的case,比如:amixer get PCM playback | sed -n '/.*\[\([0-9]*\)%].*/s//\1/p'
  • @JonathanLeffler :它可以是 0 到 100 之间的任何值,我想要 100 中的任何一个,它在输出中的位置是固定的。
  • 好的;所以我展示的sed 命令应该在两行输出中给你两个数字,左前在右前。
  • @JonathanLeffler:如何在变量中收集它?
  • x=$(amixer | sed) 在大纲中。 Command Substitution 是关键。

标签: linux parsing awk grep


【解决方案1】:

首先,样本输出中有两个100% 数字;你想要哪个?如果他们总是100%,那么你可以简单地分配var=100,所以大概他们有时会小于100%

看起来有点像sed的case,比如:

amixer get PCM playback | sed -n '/.*\[\([0-9]*\)%].*/s//\1/p'

sed 命令应该在两行输出中为您提供两个数字,左前值在右前。

您使用Command Substitution 在变量中收集来自sed 的输出:

playback=$(amixer get PCM playback | sed -n '/.*\[\([0-9]*\)%].*/s//\1/p')

这将给出playback 中的两个数字。您可能更喜欢使用数组:

playback=( $(amixer get PCM playback | sed -n '/.*\[\([0-9]*\)%].*/s//\1/p') )

现在你可以使用了:

left=0
right=1
echo "Left = ${playback[$left]}"
echo "Right = ${playback[$right]}"

这假设您使用bash 作为您的外壳。

【讨论】:

    【解决方案2】:

    这是一种方法。
    将左值存储在变量left

    left=$(amixer get PCM playback | awk -F"[%[]" '/Left:/ {print $2}')
    


    在变量right中存储正确的值

    right=$(amixer get PCM playback | awk -F"[%[]" '/Right:/ {print $2}')
    


    或者将两个数据存储在变量db

    db=$(amixer get PCM playback | awk  -F"[%[]" '/dB/ {print $2}')
    echo "$db"
    100
    100
    

    【讨论】:

      【解决方案3】:

      使用 Gnu grep 和 Perl 正则表达式与正前瞻和后瞻,你可以得到左说话者的价值

      grep -Po '(?<=Left: Playback 255 \[)[^]]*(?=%\])'
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-10-25
        • 1970-01-01
        • 1970-01-01
        • 2023-03-19
        • 1970-01-01
        相关资源
        最近更新 更多