从文本中提取链接信息

LinuxBeginner
立即练习

介绍

在这个项目中,你将学习如何使用 Bash 脚本从 Markdown 文档中提取链接信息。这是软件开发中的一项常见任务,开发人员需要从基于文本的文档中处理和提取特定信息。

👀 预览

$./getlink.sh labex_lab1.md
course https://labex.io/courses/

🎯 任务

在这个项目中,你将学习:

  • 如何创建一个 Bash 脚本,从 Markdown 文档中提取链接文本和 URL
  • 如何使用正则表达式和诸如greppaste等命令行工具来处理文本数据
  • 如何使脚本可执行并使用命令行参数运行它

🏆 成果

完成这个项目后,你将能够:

  • 开发一个可以从 Markdown 文档中提取链接信息的 Bash 脚本
  • 理解脚本的逻辑和实现,包括正则表达式和常见命令行工具的使用
  • 将在这个项目中学到的技能应用到软件开发工作中的其他文本处理任务中

创建 getlink.sh 脚本

在这一步中,你将创建一个能够从 Markdown 文档中提取所有链接的 getlink.sh 脚本。

  1. 打开一个文本编辑器,创建一个名为 getlink.sh 的新文件。
  2. 将以下代码添加到该文件中:
#!/bin/bash

## 提取链接
grep -E "\[.*\]\(.+\)" "$1" | grep -vP '\!\[' | grep -oP '\[\K[^\]]+(?=\]\([^\)]+\))' > "links.txt"
grep -E "\[.*\]\(.+\)" "$1" | grep -vP '\!\[' | grep -oP '\]\(\K[^\)]+(?=\))' > "urls.txt"

## 合并链接和URL
paste -d' 'links.txt urls.txt

## 清理临时文件
rm links.txt urls.txt
  1. 保存文件。
✨ 查看解决方案并练习

测试 getlink.sh 脚本

在这一步中,你将通过使用一个 Markdown 文件作为参数来运行 getlink.sh 脚本来测试它。

  1. 在与 getlink.sh 脚本相同的目录下,有一个名为 labex_lab1.md 的 Markdown 文件。该文件包含以下内容:
Use the course categories and tags on the [course](https://labex.io/courses/) page to filter and search for courses
  1. 使用 labex_lab1.md 文件作为参数运行 getlink.sh 脚本:
./getlink.sh labex_lab1.md
  1. 脚本应输出以下内容:
course https://labex.io/courses/

此输出表明脚本已成功从 Markdown 文件中提取了链接信息。

✨ 查看解决方案并练习

理解 getlink.sh 脚本

在这一步中,你将理解 getlink.sh 脚本中的代码。

该脚本执行以下任务:

  1. 提取链接文本:第一个 grep 命令从 Markdown 文件中提取链接文本,并将其保存到一个名为 links.txt 的临时文件中。grep -E "\[.*\]\(.+\)" 命令匹配 Markdown 链接格式 [text](url),而 grep -vP '\!\[' 命令排除图像链接。
  2. 提取链接 URL:第二个 grep 命令从 Markdown 文件中提取链接 URL,并将它们保存到一个名为 urls.txt 的临时文件中。grep -oP '\]\(\K[^\)]+(?=\))' 命令捕获 Markdown 链接格式的 URL 部分。
  3. 合并链接文本和 URLpaste -d' 'links.txt urls.txt 命令合并临时文件中的链接文本和 URL,并用空格分隔它们。
  4. 清理临时文件rm links.txt urls.txt 命令删除脚本执行过程中创建的临时文件。

通过理解脚本的逻辑,你可以根据自己的特定需求对其进行修改或扩展,例如处理不同类型的链接或对提取的信息进行额外的处理。

✨ 查看解决方案并练习

总结

恭喜你!你已经完成了这个项目。你可以在 LabEx 中练习更多实验来提升你的技能。