-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.txtfile3.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それらを1つずつ渡し、コンテンツをに渡しますsed
  3. 行頭の空白をすべて削除する
  4. nameの値まですべてを削除します
  5. nameの値と の値の間のすべてvalueをタブ文字に置き換えます
  6. valueの値の後のすべてを削除します
  7. 結果を新しいファイルに保存し、ファイル拡張子_outの直前に元のファイル名にサフィックスを追加しますtxt
4

2 に答える 2

2

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' 

注: "." の間にスペースはありません。および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 に答える