0

ウィキからエクスポートされたページがあり、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`
....

ただし、複数のテキストを含むgrep結果が[wiki:表示された場合、最後のテキストのみがプルされ、他のテキストはプルされません。たとえば、次の場合$search

構成を開始する前に、Cmakeによって検出されるように、必要なすべてのライブラリをインストールする必要があります。この手順を見逃した場合は、[wiki:CT / Checklist / Libraries"ライブラリを参照してください。[t]を押すと、詳細が記載された詳細モード画面に切り替えることができます。5ページが利用可能です[wiki:CT / Checklist / Cmake / advanced_mode eaに関する情報を取得するには-'''Canteraのインストール''':Canteraが正しくインストールされていない場合、またはセットアップファイル'''〜/ setup_cantera'''を入手していない場合は、次の情報を受け取る必要があります。メッセージ。この問題を修正するには、[wiki:CT / FormulaCantera "Canterainstallation"]ページを参照してください。組み込みのトランスポート、熱力学、および化学を使用する場合は、CanteraオプションをOFFに設定できます。

その後、戻るだけCT/FormulationCanteraで、他のリンクは表示されません。これは使用によるものであることがわかっているcutので、回線の交換が必要$uniquepagesです。

誰かがbashで何か提案がありますか?必要に応じてsedまたはperlを使用できますが、可能であれば、ワンライナーでページ名のリストを抽出することを望んでいます。

4

1 に答える 1

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

upd。スペースなしですべてを削除するにはcut

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