我有几个包含具有唯一子字符串的行的文件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">
Run Code Online (Sandbox Code Playgroud)
name和valuehtml 标签属性总是不同的。
我需要将制表符分隔的值放入单独的文件中,其名称与原始文件相对应。
00B5JZ 350378,00
0599 0,00
0096 0,00
0433 0,00
1100 0,00
Run Code Online (Sandbox Code Playgroud)
应从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
Run Code Online (Sandbox Code Playgroud)
cat将它们一一传递给sedname删除的值以内的所有内容name's 值和's 值之间的所有内容valuevalue's 值之后的所有内容_out之前添加后缀到原始文件名txt使用sed:
sed -e 's/.*NAME-\([^"]*\)" value="\([^"]*\)".*/\1\t\2/' -e 's/\.//g' INPUT.HTML
Run Code Online (Sandbox Code Playgroud)
.*任何字符零次或多次[^"]*任意字符但"重复 0 次或多次\(...\)捕获封闭的部分,这里上面的子字符串直到双引号被记住\1,并且值被记住\2s/PATTERN/REPLACEMENT/用替换项替换该模式;在这里,它提取 NAME- 和值之后的部分,并用制表符 ( \t)分隔的两个捕获的部分替换整行s/\.//g删除所有点(/g意思是“全局”,即所有点)