0

我有一个从 wiki 导出的页面,我想使用 bash 找到该页面上的所有链接。该页面上的所有链接都在表单中[wiki:<page_name>]。我有一个脚本:

...
# First search for the links to the pages                                                                                                                                    
search=`grep '\[wiki:' pages/*`

# Check is our search turned up anything                                                                                                                                     
if [ -n "$search" ]; then
    # Now, we want to cut out the page name and find unique listings                                                                                                         
    uniquePages=`echo "$search" | cut -d'[' -f 2 | cut -d']' -f 1 | cut -d':' -f2 | cut -d' ' -f 1 | sort -u`
....

但是,当出现一个包含多个[wiki:文本的 grep 结果时,它只会拉出最后一个而不是其他任何一个。例如,如果$search是:

在开始配置之前,必须安装所有必需的库才能被 Cmake 检测到。如果您错过了这一步,请参阅 [wiki:CT/Checklist/Libraries"Libr 通过按 [t] 您可以切换到具有更多详细信息的高级模式屏幕。这 5 个页面可用 [wiki:CT/Checklist/Cmake/advanced_mode此处]。要获取有关 ea 的信息 - '''安装 Cantera''':如果尚未正确安装 Cantera 或者您没有获取安装文件 '''~/setup_cantera''',您应该会收到以下信息消息。请参阅 [wiki:CT/FormulationCantera “Cantera 安装”] 页面来解决此问题。如果您计划使用内置传输、热力学和化学,您可以将 Cantera 选项设置为关闭。

然后它只会返回CT/FormulationCantera并且不会给我任何其他链接。我知道这是由于使用cut,所以我需要更换$uniquepages线路。

有人对bash有任何建议吗?如果需要,它可以使用 sed 或 perl,但如果可能的话,我希望单行来提取页面名称列表。

4

1 回答 1

2
egrep -o '\[wiki:[^]]*]' pages/* | sed 's/\[wiki://;s/]//' | sort -u

更新。在没有空格的情况下删除所有内容cut

egrep -o '\[wiki:[^]]*]' pages/* | sed 's/\[wiki://;s/]//;s/ .*//' | sort -u
于 2012-08-16T14:47:40.743 回答