我有一堆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)
答案 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都可以做得更好。