2012-06-07 2 views
0

줄을 읽고 오전 내 스크립트에서이를 일치시키는 정규식을 사용하고 있습니다. (/ bin/bash)구분 기호 셸 스크립트로 문자열을 사용하는 방법

echo $line | grep -E '[Ss][Uu][Bb][Jj][Ee][Cc][Tt]: [Hh][Ee][Ll][Pp]' > /dev/null 2>&1 
if [[ $? = "0" && -z $subject ]]; then 
    subject=`echo $line | cut -d: -f2` > /dev/null 
    echo "Was able to grab a SUBJECT $line and the actual subject is -> $subject" >> $logfile 

fi 

이제 내 문제는 내가 콜론을 구분 기호로 사용한다는 것입니다. 그러나 때때로 전자 우편은 주제에 여러 개의 콜론을 가지므로 그 때문에 전체 제목을 붙잡을 수는 없습니다. 나는 주제를 따라 콜론 이후 모든 것을 잡을 방법을 찾고있다. 루프를 통해 콜론 (:)을 확인하는 방법도 있습니다. 어쩌면 잘라내기로 구분 기호로 문자열을자를 수 있습니까? 확실하지 않은 ... 어떤 아이디어?

감사합니다. 당신이 이미-Q-주석의 제안에

+0

발견 나를 위해 일한 것. 방금 전 제목 ='echo $ {line # * :}' 콜론과 가장 짧은 일치를 삭제했습니다. 읽어 주셔서 감사합니다. – Dan

답변

1

다른 대안은 다음과 같습니다 -f2 수단 후

cut -d\: -f2- 

대시는 모든 필드 나머지를 포함한다. 셸 기반 솔루션은 "잘라 내기"프로세스를 실행하는 것보다 빠릅니다.

$ line에있는 여러 단어 사이에 공백이 없거나 여러 줄을 잃어 버리는 것을 피하기 위해 echo/arg (와 $ {line # * :})를 사용하는 것이 좋습니다. pass/it- 줄의 문자에 아무런 영향을 미치지 않았으므로 그대로 사용하십시오.

grep에는 -i 플래그가있어 모든 문자에 대해 [lower-upper]를 쓰지 않아도되고 더 읽기 쉽도록합니다. grep의 출력을/dev/null로 리다이렉트하는 대신 출력하지 않는다는 의미의 -q 플래그를 사용할 수 있습니다. ok/not 상태 코드로 종료하면 체크 할 수 있습니다. 첫번째 깃발을 빠져 나가고 싶다. 다른 깃발로도 그걸 할 수 있다는 것을 발견했다.