2012-08-16 12 views
0

위키에서 내 보낸 페이지가 있고 해당 페이지에서 bash를 사용하여 모든 링크를 찾고 싶습니다. 해당 페이지의 모든 링크는 양식입니다. 그것은 여러 [wiki: 텍스트와 그렙 결과 발표 때bash에서 여러 부분 문자열 추출

... 
# 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` 
.... 

그러나, 그것은 마지막 하나가 아닌 어떤 다른 사람을 끌어 : 내가 수행하는 스크립트가 있습니다. 예를 들어, $search이 다음과 같은 경우 :

구성을 시작하기 전에 필요한 모든 라이브러리를 설치하여 Cmake에서 감지해야합니다. 이 단계를 빠뜨렸다면 [wiki : CT/Checklist/Libraries] 라이브러리를 참고하십시오. [t]를 누르면 더 자세한 정보가 포함 된 고급 모드 화면으로 전환 할 수 있습니다 [wiki : CT/Checklist/Cmake/advanced_mode cantera 설치에 대한 정보를 얻으려면 : Cantera가 제대로 설치되지 않았거나 설정 파일 '' '~/setup_cantera' ''을 제공하지 않은 경우 다음을 받아야합니다. 메시지 [위키 : CT/FormulationCantera "칸 테라 설치"]를 참조하십시오..이 문제를 해결하기 위해 페이지 당신이 내장 된 사용하려면 전송, 열역학 및 화학하려는 경우가 OFF로 칸 테라 옵션을 설정할 수 있습니다

. 그때 그것은 단지 CT/FormulationCantera을 반환하고 나에게 다른 링크를주지 않습니다. 이것은 cut을 사용하는 것임을 알고 있으므로 012를 대신 할 필요가 있습니다.행.

누구나 bash에서 제안 사항이 있습니까? 필요하다면 sed 나 perl을 사용할 수 있지만 가능하다면 한 페이지짜리 목록을 추출하기를 바라고 있습니다.

답변

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

upd. 없이 공간을 모두 제거하기 위해 cut

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

아름답다. 유일한 변경은''wid :''w -l : ''{text_for_link>]'형식의 링크가있을 경우를 대비하여''-d'' -f1''을 추가하는 것입니다. 그러나 샘플 데이터는 그것을 가지고있었습니다. 감사! – tpg2114

+0

@ tpg2114'cut '대신's /. * //''sed 명령을 추가 할 수 있습니다. – rush