2017-07-30 11 views
0

それぞれ15-20のフォームフィールドを含むほぼ100のHTMLページを更新する必要があります。一括更新フォームのフィールド名とIDをbash、grep、sedで

セクション508に準拠するには、すべて一意に名前を付ける必要があります。

各フォームグループは、このような属性の同じ値の3があります

<label for="input-title" class="control-label">Title*</label> 
<input class="form-control" id="input-title" name="input-title" value="SA Analyst" required> 

お知らせ、名前とid属性がすべて同じであるため。 (以下の正規表現を参照)HTMLファイル内のすべてのフォームフィールドをループ - :

<label for="input-title21" class="control-label">Title*</label> 
<input class="form-control" id="input-title21" name="input-title21" value="SA Analyst" required> 
挑戦がにある

は、私はちょうどそれが最後にインクリメント数でこのような何かをする必要があります - それぞれの "form-group"を、 "for、name、id"という3つの属性値の末尾に追加されたインクリメント番号で更新する - 各フォームグループに同じ増分の数字が付いていることを確認する現在のループで同じ番号を取得します)

ここに私が働いて始まるbashのコードです:

#!/bin/bash 
FILES=/Users/Administrator/files/*.html 
counter=1 
for f in $FILES 
do 
    echo "Processing $f file..." 
    # take action on each file. $f store current file name 
    # cat $f 
    # sed 's/<input/<input2/g' $f > $f.txt 

    sed "s/<input/<input$counter/g" $f > $f.txt 

    echo $counter 
    ((counter++)) 


done 
echo All done 

このコードが正常にカウンタ変数の数で入力を更新し、.txtファイルに保存しますが、それは中にすべての入力フィールドを更新しますので、これはまだ解決策ではありません同じインクリメント数のHTMLファイル。

(.*for\=")([0-9A-Za-z-]+)(".*\n\s*[0-9A-Za-z\<\>\-\=\"\s]*[id=|name=]")([0-9A-Za-z-]+)(".*[id=|name=]")([0-9A-Za-z-]+)("\s[type|req]) 

それでは、どのように私は上記のbashコードでこの正規表現を統合し、あらゆる形式の3つの属性を更新します:ここで

は私が思い付いた正規表現を変更する必要があるフォームグループを見つけています-グループ? mawkで

+1

私は、XML/HTMLパーサ(xmlstarlet、xmllintを...)を使用することをお勧めします。 – Cyrus

+0

この例はありますか?ありがとう –

答えて

0

scriptfile1:ここ

/label for=\"input-title\"/ { 
     num++ 
     } 
{ 
     gsub("label for=\"input-title\"","label for=\"input- 
title"num"\"") 
     gsub("id=\"input-title\"","id=\"input-title"num"\"") 
     gsub("name=\"input-title\"","name=\"input-title"num"\"") 
     print 
} 

我々は、カウンタ(NUM)私たちは、私たちは、その後の3つのインスタンスをチェック=「入力テキスト」のテキストラベルに遭遇するたびにインクリメントgensubを使用して各セグメント(=、id =およびname =)の入力テキストを編集し、これらを変更してnum変数を追加します。最終的に再構築された行が印刷されます。

ラン:

awk -f scriptfile1 sourcedatafilename 
+0

私はあなたのコードを実行しようとしました:awk:非終了文字列ラベル= ...ソース行6ソースファイルscriptfile1 \t $ 0 = gensub( "label for = \" input-title \ "、" label for = \ "input- >>> <<< –

+0

awkのあなたのバージョンでなければなりません –

+0

awkバージョン20070501 –