从txt中提取数字

时间:2016-09-21 23:58:15

标签: bash awk sed

我想从res.txt中提取数字26,其中包含:

<body>

  <div id="container">

    <div id="mainbox1">

      <div id="iconone">
        <IMG SRC="http://i67.tinypic.com/vhxls9.png" ALT="icon">
      </div>

      <div id="minidescription">ellentesque non semper leo. Aliquam eu ultricies tellus. Ut rutrum fringilla rhoncus. Vestibulum bibendum quam at orci bibendum placerat. Etiam lectus nisl, ullamcorper ac aliquam vitae, efficitur eu mauris. Suspendisse porttitor euismod tempus.
        Quisque eleifend nulla vel auctor dictum. Ut posuere condimentum odio. Aliquam erat volutpat. Sed in laoreet odio. Mauris quis feugiat dolor.</div>


      <div id="linkguide">
        <div id="navigation">
          <a href="http://google.com">Link 1</a><br>
          <a href="http://yahoo.com">Link 2</a><br>
          <a href="http://bing.com">Link 3</a><br>
          <a href="http://bing.com">Link 4</a><br>
        </div>
      </div>
    </div>
    <!-- Question One -->
    <div class="question">
      <div class="icon">
       <img src="http://i66.tinypic.com/2u5qhe8.png">
      </div>
      <div class="">
       <p class="center">This paragraph will be red and center-aligned.</p>
      </div>
        
    </div>

    <div class="answer">
      <div class="icon">
        <img src="http://i65.tinypic.com/qod4kx.png">
      </div>
      <div class=""> 
          <p class="center">This paragraph will be red and center-aligned.</p>
      </div>
    </div>

    <!-- Question two -->

     <div class="question">
      <div class="icon">
       <img src="http://i66.tinypic.com/2u5qhe8.png">
      </div>
      <div class="">
       <p class="center">This paragraph will be red and center-aligned.</p>
      </div>  
    </div>
    <div class="answer">
      <div class="icon">
        <img src="http://i65.tinypic.com/qod4kx.png">
      </div>
      <div class=""> 
          <p class="center">This paragraph will be red and center-aligned.</p>
      </div>
    </div>

</body>

我试过

numid=6,iface=MIXER,name='Speaker Playback Volume'
; type=INTEGER,access=rw---R--,values=2,min=0,max=52,step=0
: values=26,26
| dBminmax-min=-52.00dB,max=0.00dB

但是没有用。 有人可以帮我弄这个吗?我也可以使用grep或awk来提取。

2 个答案:

答案 0 :(得分:1)

如果您拥有GNU grep,可以使用它轻松完成,如下所示:

grep -oP 'values=\K\d(?=,)' res.txt

答案 1 :(得分:0)

使用sed

这将打印第一行中的第一个值,其中(a)跟在一行numid之后,(b)匹配: values=

$ sed -n '/numid/,/: values=/{s/: values=\(.*\),.*/\1/p}' res.txt
26

工作原理:

  • -n

    除非我们明确要求,否则告诉sed不要打印。

  • /numid/,/: values=/

    这会选择以匹配numid的行开头并以匹配: values的行结束的行范围。

  • s/: values=\(.*\),.*/\1/p

    对于这些选定的行,这会在=之后和,之前打印第一个字符串。

使用awk

$ awk -F'[,=]' 'f && /: values=/{print $2; f=0} /numid/{f=1}' res.txt
26

工作原理:

  • -F'[,=]'

    这告诉awk使用,=作为字段分隔符。

  • f && /: values=/{print $2; f=0}

    如果变量f非零并且此行与: values=匹配,则打印第二个字段$ 2。最后,将f设置为零。

  • /numid/{f=1}

    如果当前行与numid匹配,请将变量f设置为1。