我如何使用bash从字符串中获取字符

时间:2013-05-30 11:26:35

标签: bash

我有几个包含唯一字符串NAME-的行的文件:

      <input type="hidden" name="NAME-00B5JZ" value="350.378,00">
       <input type="hidden" name="NAME-0599" value="0,00">
       <input type="hidden" name="NAME-7012" value="0,00">
       <input type="hidden" name="NAME-0096" value="0,00">
       <input type="hidden" name="NAME-0433" value="0,00">
       <input type="hidden" name="NAME-1100" value="0,00">
nameNAME-之后的

value始终不同

我需要获取的内容应该是由标签分隔的单独文件

00B5JZ 350378,00
0599 0,00
0096 0,00
0433 0,00
1100 0,00

应该删除点 谢谢!

3 个答案:

答案 0 :(得分:4)

使用sed:

sed -e 's/.*NAME-\([^"]*\)" value="\([^"]*\)".*/\1\t\2/' -e 's/\.//g' INPUT.HTML

答案 1 :(得分:1)

Grep解决方案

<强>输入

       <input type="hidden" name="NAME-00B5JZ" value="350.378,00">
       <input type="hidden" name="NAME-0599" value="0,00">
       <input type="hidden" name="NAME-7012" value="0,00">
       <input type="hidden" name="NAME-0096" value="0,00">
       <input type="hidden" name="NAME-0433" value="0,00">
       <input type="hidden" name="NAME-1100" value="0,00">

<强>命令

$>  grep -Po "NAME-(.*) value=(.*)" INPUT_FILE  | tr '"|>|NAME\-|value=' ' ' | sed 's/\.//g' 

注意:&#34;。&#34;之间没有空格。和&#34; *&#34;在grep语句中

<强>输出

 00B5JZ       350.378,00
 0599         0,00
 7012         0,00
 0096         0,00
 0433         0,00
 1100         0,00

答案 2 :(得分:1)

阅读“Sed&amp; awk”之后,本书为自己找到了最优雅的解决方案:

grep 'NAME-' INPUT_FILE | awk -F\" '{ print $4 "\t" $6 }'| tr -d 'NAME\-|.'

假设我们有几个文件:

for a in *.htm; do grep 'NAME-' $a | awk -F\" '{ print $4 "\t" $6 }'| tr -d 'NAME\-|.' > $a.txt; done

谢谢大家!