我需要更新几乎100个包含15-20个表单字段的HTML页面。
要通过Section 508合规性,它们都需要具有唯一名称。
每个表单组都有三个相同的属性值,如下所示:
<label for="input-title" class="control-label">Title*</label>
<input class="form-control" id="input-title" name="input-title" value="SA Analyst" required>
注意for,name和id属性都是一样的。
我只需要它就像这样,最后增加一个数字:
<label for="input-title21" class="control-label">Title*</label>
<input class="form-control" id="input-title21" name="input-title21" value="SA Analyst" required>
面临的挑战是: - 遍历HTML文件中的所有表单字段(请参阅下面的正则表达式) - 更新每个&#34; form-group&#34;在三个属性值的每一个的末尾附加一个递增的数字&#34; for,name和id&#34; - 确保每个表单组具有相同的附加,递增的数字(即每三个属性在当前循环中将获得相同的数字)
以下是我正在使用的起始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代码集成并更新每个表单组中的三个属性?
答案 0 :(得分:0)
使用mawk:
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
}
这里我们每次遇到=&#34; input-text&#34;的文本标签时都会递增一个计数器(num),然后检查每个段中的三个输入文本实例(for =,id =和name =)使用gensub并更改这些以添加num变量。我们终于打印了重建线。
使用以下命令运行:
awk -f scriptfile1 sourcedatafilename