【问题标题】:awk/sed filename add to pattern matchawk/sed 文件名添加到模式匹配
【发布时间】:2013-12-09 15:01:57
【问题描述】:

我有多个 html 文件要组合成一个 html 文件,但我需要修改超链接以避免在组合它们时出现相同的超链接。

文件名:chapter1.html、chapter1.html 等

我想找到这个标签

 <a href="#4">

并将其替换为文件名(chapter1.html),输出必须是这样的(要排除文件名的扩展名)

<a href="#chapter14">

如何使用 awk 或 sed 做到这一点?谢谢

【问题讨论】:

    标签: regex bash sed awk


    【解决方案1】:

    使用 sed 类似这样:

    > file='chapter1.html'
    > f="${file%.*}"
    > echo "$f"
    chapter1
    > sed 's/\(href="#\)\([^#]*\)"/\1'"$f"'\2"/' "$file"
    

    多文件解决方案:

    for file in *.html; do
        f="${file%.*}"
        sed -i.bak 's/\(href="#\)\([^#]*\)"/\1'"$f"'\2"/' "$file"
    done
    

    【讨论】:

    • 我无法得到这个,它不包括文件名chapter1.html。我正在寻找类似的东西; sed 's/href="#/$filename/g' chapter1.html
    • 太棒了,做得很好。 $f 是指没有扩展名的文件名吗?我刚刚写了 sed 's/(href="#)([^#]*)"/\1'"$f"'\2"/' file.txt 并且它有效。但是你的脚本有分配变量等,你在哪里运行这些脚本?抱歉,我是菜鸟 :(
    • 是的 $f 是没有扩展名的文件名。确保在 BASH shell 中运行它。
    • 它并不能很好地工作,它需要分配变量,我不能同时为多个文件执行此操作。我想尝试这样的流程,我将为多个文件执行此操作; sed 's/(href="#)([^#]*)"/\1'"$f"'\2"/' file.txt
    • 检查更新以编辑多个文件。这也支持内联编辑。
    【解决方案2】:
    for File in *.html
     do
       sed "s|\(<a href=\"#\)\([[:digit:]]\{1,}"\)|\1${File%.*}\2|g" ${File} >> FinalFile.html
     done
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-08-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-11-27
      • 1970-01-01
      • 2013-08-26
      • 2022-01-13
      相关资源
      最近更新 更多