我需要更新近100个包含15-20个表单字段的HTML页面。使用bash,grep和sed批量更新表单字段名称和ID
要通过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>
通知之为,名称和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文件中的所有表单域(见下面的正则表达式) - 用每个“form-group”更新后面的三个属性值“for,name and id”来更新每个“form-group” - 确保每个form-group具有相同的附加增量数字(即每三个属性会在当前循环中得到相同的数字)
这里是开始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的代码和更新三个属性-组?
我建议使用XML/HTML解析器(xmlstarlet,xmllint ...)。 – Cyrus
你有这样的例子吗?谢谢 –