使用bash,grep和sed

时间:2017-07-30 16:17:55

标签: bash sed grep section508 wcag

我需要更新几乎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代码集成并更新每个表单组中的三个属性?

1 个答案:

答案 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