-2

我有几个文件包含具有唯一子字符串的行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">

namevaluehtml 标签道具总是不同的。

我需要将制表符分隔的值放入单独的文件中,其名称与原始文件相对应。

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

应该从value' 值中删除点

编辑:我决定编辑这篇文章,并为阅读这篇文章的人提供另一种方法:

假设文件是file1.txt​​ , file2.txt,file3.txt当前目录中没有其他内容:

for f in file*txt; do cat ${f} | sed 's/^[[:space:]]*//;s/<input.*name="NAME-//;s/" value="/\t/;s/">//;s/\.//g' > ${f//\.txt/_out\.txt}; done
  1. 首先我们得到所有文件名
  2. cat他们一一传递内容到sed
  3. 删除行首的所有空格
  4. 删除所有不超过name's 的值
  5. 用制表符替换name' 值和' 值之间的所有内容value
  6. 删除value' 值之后的所有内容
  7. 将结果保存到新文件中,在文件扩展_out名之前为原始文件名添加后缀txt
4

2 回答 2

5

使用 sed:

sed -e 's/.*NAME-\([^"]*\)" value="\([^"]*\)".*/\1\t\2/' -e 's/\.//g' INPUT.HTML
  • .*任何字符零次或多次
  • [^"]*任何字符,但"重复 0 次或更多次
  • \(...\)捕获封闭的部分,这里将上面的子字符串记入双引号,\1并将值记入\2
  • s/PATTERN/REPLACEMENT/用替换替换模式;在这里,它提取 NAME- 之后的部分和值​​,并将整行替换为仅用制表符 ( \t)分隔的两个捕获的部分
  • s/\.//g删除所有点(/g意思是“全局”,即所有点)
于 2013-05-30T11:31:55.817 回答
2

解决方案

输入

       <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' 

注意: “.”之间没有空格。和 grep 语句中的“*”

输出

 00B5JZ       350.378,00
 0599         0,00
 7012         0,00
 0096         0,00
 0433         0,00
 1100         0,00
于 2013-05-30T13:05:00.860 回答