2010-05-07 5 views
0

난 우리가 텍스트를 말할 수 등배시 분할 문자 (배열 부재)

http://pastebin.com/H8zTbG54

텍스트로 스플릿 규칙 설정이 "OR"라인

끝에

나 버킷 (배시 어레이 부재)에 라인 (룰)의 세트 넣어야하지만 각각의 어레이 부재는 규칙 세트 함유한다 1,024

을 각 어레이 멤버 문자 제한이 각 어레이 멤버들뿐만 문자 수가 1024

추천한다고 가정 규칙 텍스트 A 또는 B : 또는 C : 또는 D : 또는 E 또는 F 또는 G 또는 H

출력 어레이 부재 (1)는 OR를 = 되어야 초과 할 수 없다 B

어레이 부재 (2) = c 또는 d 또는 E

어레이 부재 (3) = F 또는 g

어레이 (4) = H

,

아마 어떤 다른 사람이

답변

1

이 완전히 사소한하지

는 솔라리스 10 서버에서 작업을 그렇게하는 데 도움 수 있으며, 좀 더 설명을 필요로하지만, 기본적으로는 OR에 의해 처음을 분할/AND (그리고 패턴을 선택하고 다시 1024 자보다 큰 청크를 다시 분할합니다.

PS Perl, Python, PHP 또는 기타 다른 스크립트 언어를 사용하면 더욱 편리하게 결과를 얻을 수 있습니다.

예 : PHP (한 동안 PHP를 완전히 정확하지 않은 경우 확실하지)의 기본 점은 다음과 같이 갈 수 다음 samplerule 파일의 개별 규칙의

function splitByOr($input) 
{ 
    $tokens = explode(" OR ",$input); 
    foreach ($t in $tokens) 
    if (strlen($t) > 1024) 
     $t=splitByOr($t); 
    return $tokens; 
} 
+0

이것은 실제로는 찾고 있지 않습니다. ( – soField

0

없음 길이가 148자를 초과 할 수 없습니다 - 지금까지 1024 자 제한보다 작습니다. 그 한도를 초과하면 규칙을 어떻게 처리해야하는지 말하지 않습니다.

이것은 매우 간단한 Bash 스크립트로 샘플을 리터럴 "\ n"과 "규칙"이라는 배열로 나눕니다. 그것은 1024자를 초과 라인을 건너 뛰고 에러 메시지를 출력 :

#!/bin/bash 
while read -r line 
do 
    ((count++)) 
    if ((${#line} > 1024)) 
    then 
     echo "Line length limit of 1024 characters exceeded: Length: ${#line} Line no.: $count" 
     echo "$line" 
     continue 
    fi 
    rules+=($line) 
done < <(echo -e "$(<samplerule)") 

결과에 관계없이 라인 길이를 자릅니다이 변화 : 리터럴 "\ n"사실이 아닌 경우

#!/bin/bash 
while read -r line 
do 
    rules+=(${line:0:1024}) 
done < <(echo -e "$(<samplerule)") 

done < <(echo -e "$(<samplerule)") 

이런 말 :와 파일에 당신이, AWK 전적으로이 코딩보다는 배쉬 배열을 사용하는 위의 버전 중 하나의 라인을 변경해야하는 것은이 말한다

done < <(awk 'BEGIN {RS="OR"} {print $0,"OR"}' samplerule) 
if [[ "${rules[${#rules[@]}-1]}" == "OR" ]] 
then 
    unset "rules[${#rules[@]}-1]" 
fi 

"OR"에 줄을 나눕니다.

편집 : 마지막에 추가 "OR"를 제거하는 명령이 추가되었습니다.