我有一个文件,其中包含许多链接的形式<a href="foo">。这些需要被赋予一个.html扩展名,我有以下命令来做到这一点:
<a href="foo">
.html
sed -i 's/\(href="\)\([^"]*\)/\1\2.html/g' "$FILE"
然而,我需要 * 不 * 这样做的任何链接,其中有一个协议(例如:https://或已经有扩展名(例如.css,.js-很高兴只匹配这些。我该怎么做?sed在这里仍然是一个合适的工具吗?
https://
.css
.js
qpgpyjmq1#
这个sed可以工作。
sed
$ sed -Ei.bak '/https|\.[a-z]+/!s/"[^"]*/&.html/' input_file
如果没有,请考虑在问题中添加更多信息。
8nuwlpux2#
awk -F "<|>" '/a href=\"https/ { for(i=1;i<=NF;i++) { if (match($i,"a href=\"https")) { split($i,arr,"\""); if (!match(arr[2],".")) { sub(arr[2],arr[2]".html",$0) } } } }1' inputfile > inputfile1
使用awk作为替代方法,将文件分隔符设置为“<”或“>”,然后搜索包含'a href=“https'的所有行(这将忽略http条目)根据分隔符循环遍历所有字段。如果该字段包含'a href=“https',则处理该字段。根据分隔符'"'将字段拆分为数组arr。因此,条目arr[2]将包含href条目,即foo处理foo,如果条目没有“.”(使用awk的match函数检查),则将arr[2]替换为arr[2],并将“.html”附加到末尾(使用awk的sub函数)。使用1打印对行所做的更改。更改将输出到inputfile 1一旦您验证了更改是正确的:
mv inputfile1 inputfile
2条答案
按热度按时间qpgpyjmq1#
这个
sed
可以工作。如果没有,请考虑在问题中添加更多信息。
8nuwlpux2#
使用awk作为替代方法,将文件分隔符设置为“<”或“>”,然后搜索包含'a href=“https'的所有行(这将忽略http条目)
根据分隔符循环遍历所有字段。
如果该字段包含'a href=“https',则处理该字段。根据分隔符'"'将字段拆分为数组arr。因此,条目arr[2]将包含href条目,即foo
处理foo,如果条目没有“.”(使用awk的match函数检查),则将arr[2]替换为arr[2],并将“.html”附加到末尾(使用awk的sub函数)。使用1打印对行所做的更改。
更改将输出到inputfile 1
一旦您验证了更改是正确的: