首页 > 解决方案 > 使用 GREP 和 XARGS 删除 .html URL

问题描述

我正在使用 WGET 刻录 PHP 网站的静态副本。我想删除每个文件中对.html的所有引用<a href。所以任何链接,例如,<a href="path/project-name.html">Project Name</a>我想更改为<a href="path/project-name">Project Name</a>

该命令grep -rl index.html . | xargs sed -i 's/index.html//g'非常适合删除所有链接中的每个index.html

但我无法让它对每个带有 command 的.htmlgrep -rl *.html . | xargs sed -i 's/*.html//g'链接都有效。

对我的正则表达式的任何帮助将不胜感激。

标签: regexcommand-linegrepwgetxargs

解决方案


's/*.html//g'sed是错误的,因为您在 LHS(替换命令的左侧部分)中输入了一个全局模式,其中需要一个正则表达式模式。

您可以使用

grep -rl *.html . | xargs sed -i -E 's/(href="[^"]*)\.html"/\1"/g'

详情

  • -E- 启用 POSIX ERE 正则表达式语法的选项
  • (href="[^"]*)\.html"- 匹配并捕获到第 1 组(稍后,通过\1反向引用访问)href="子字符串和除之后之外的任何零个或多个字符",然后仅匹配.html子字符串
  • \1"- 替换为 Group 1 和一个"字符
  • g- 一行上的所有非重叠事件。

推荐阅读