我有一个从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选项设置为OFF。
然后它只返回CT/FormulationCantera
并且它不会给我任何其他链接。我知道这是因为使用cut
所以我需要替换$uniquepages
行。
有人在bash中有任何建议吗?如果需要,它可以使用sed或perl,但是我希望如果可能的话,我会希望单行提取页面列表列表。
答案 0 :(得分:2)
egrep -o '\[wiki:[^]]*]' pages/* | sed 's/\[wiki://;s/]//' | sort -u
UPD。删除没有cut
egrep -o '\[wiki:[^]]*]' pages/* | sed 's/\[wiki://;s/]//;s/ .*//' | sort -u