在整个HTML文件中增加所有正则表达式匹配数字

时间:2014-05-04 21:47:47

标签: shell awk sed

我有一堆HTML文件,其锚点结构如下:

<a href="/src/pkg/target/somefile.txt?s=5424:5465#L217">LinkName</a>

我通过sed运行文件将链接转换为此结构:

<a href="//domain.org/a/b/somefile.txt#cl-217">LinkName</a>

我试图解决的最后一个难题是我需要将锚中的数字增加10:

#L217    -> #L227    // first link
#cl-217  -> #cl-227  // transformed link

所以上面示例链接的最终版本是:

<a href="//bitbucket.org/juztin/config/src/tip/din.go#cl-227">LinkName</a>

我已经接近了= /

awk 'gsub(/#cl-[0-9]+/, "#cl-ABC")') # just can't get the incremented match in ABC

这个有效,但只有一次,或每行一次:

awk '{n = substr($0, match($0, /[0-9]+/), RLENGTH) + 10; sub(/[0-9]+/, n); print }

(*我没有gawk,或gnu sed)

2 个答案:

答案 0 :(得分:1)

试试这个:

1 - 创建名为replace.sh

的文件
for file in /path/to/files/*.html; do
while read line; do
    name=$line
    [[ $line =~ '<a href=".*?#L(.*?)">LinkName</a>' ]]; 
    match=${BASH_REMATCH[1]};
    replace=$((${BASH_REMATCH[1]} + 10));
    perl -i -pe 's!<a href=\".*?#L'$match'\">LinkName</a>!<a href=\"//domain.org/a/b/somefile.txt#cl-'$replace'\">LinkName</a>!g' $file
done < $file
done

2 - chmod +x replace.sh
3 - ./replace.sh

答案 1 :(得分:0)

在POSIX shell中,您可以使用let进行计算。首先将数字转换为变量,然后let my_var++将其递增。

另一方面,我在道德上有义务警告你,使用shell脚本操纵HTML是一种等待发生的可维护性灾难。 Python,JavaScript,XSLT或Java都可以做得更好。