친구넘이 네이트 온 으로 갑자기 말을 걸어 오네요.
바쁘냐고 그러더니.. 돈을 빌려 달라네요. 200만원.
아무 생각없이 친구이려니 했는데.. 계좌번호를 본냈는데..

국민 은 행 김춘금20130104224765  여기에다가 넣어줘..
OOO 이름으로 부탁할게 ..

라고 하더군요.. 순간.. 뭐야 이상한데....
바로 친구에게 전화를 걸었습니다.
뭐하냐? 너 나한테 지금 네이트온 하냐 했더니 아니라더군요..ㅋㅋㅋ

그래서 너껄로 지금 당하고 있으니 모두 알려라 라고 했구.. 전체 쪽지를 보냈는데.. 나보다 먼저 메신저를 받은 친구도 있네요..ㅋㅋㅋ

하여튼 일하다 정신없는사이 당할뻔 했습니다.

인터넷 뒤져보니 경찰에서는 정확하게 피해를 본게 없어서 어쩔수 없다고 하는거 같던데..
참 이런거나 처리안하고 뭐하나 모르겠네요.

모두들 조심 하세요.

YOUR COMMENT IS THE CRITICAL SUCCESS FACTOR FOR THE QUALITY OF BLOG POST


잡을 작성해야 할일들이 늘어서 bash shell 로 작성을 하고 있는데. 중간 중간 에러체크나 제어를 해야 하는 부분이 늘어나고 있다.
bash 책들도 모두 절판되고 웹문서에만 의존해 작업을 하다 보니 문제가 많았는데 그중 하나가 중간중간 처리 결과를 파싱해서 제어를 하는 거였다.
정규표현식으로 매칭되는 글자를 뽑아내는데 어렵게 찾아낸 흰트 스크립가 아래 이다.

#!/bin/bash
 
if [[ $# -lt 2 ]]; then
    echo "Usage: $0 PATTERN STRINGS..."
    exit 1
fi
regex=$1
shift
echo "regex: $regex"
echo $1
 
while [[ $1 ]]
do
    if [[ $1 =~ $regex ]]; then
        echo "$1 matches"
        i=1
        n=${#BASH_REMATCH[*]}
        while [[ $i -lt $n ]]
        do
            echo "  capture[$i]: ${BASH_REMATCH[$i]}"
            let i++
        done
    else
        echo "$1 does not match"
    fi
    shift
done

${BASH_REMATCH[0]} : 정규표현식 구문이 들어감.
${BASH_REMATCH[1]} : 첫번째 매칭 값이 들어감.
.
.
${BASH_REMATCH[$regex]} : 비교하는 원 문값이 들어감.

대략 분석하니 위의 값들 이었다.

참조: http://www.linuxjournal.com/content/bash-regular-expressions


YOUR COMMENT IS THE CRITICAL SUCCESS FACTOR FOR THE QUALITY OF BLOG POST



항상 쓰려고 하면 잘 모르겠는 정규 표현식 입니다.
아래 표는 정규식 컨텍스트에 사용되는 모든 메타문자와 메타문자의 동작을 보여줍니다.

문자 설명

\

그 다음 문자를 특수 문자, 리터럴, 역참조, 또는 8진수 이스케이프로 표시합니다. 예를 들어, 'n'은 문자 "n"을 찾고 '\n'은 줄 바꿈 문자를 찾습니다. '\\' 시퀀스는 "\"를 찾고 '\('는 "("를 찾습니다.

^

입력 문자열의 시작 위치를 찾습니다. Multiline 속성이 설정되어 있으면 ^는 '\n' 또는 '\r'앞의 위치를 찾습니다.

$

입력 문자열의 끝 위치를 찾습니다. Multiline 속성이 설정되어 있으면 $는 '\n' 또는 '\r'뒤의 위치를 찾습니다.

*

부분식의 선행 문자를 0개 이상 찾습니다. 예를 들어, 'zo*'는 "z", "zoo" 등입니다. *는 {0,}와 같습니다.

+

부분식의 선행 문자를 한 개 이상 찾습니다. 예를 들어, 'zo+'는 "zo", "zoo" 등이지만 "z"는 아닙니다. +는 {1,}와 같습니다.

?

부분식의 선행 문자를 0개 또는 한 개 찾습니다. 예를 들어, "do(es)?"는 "do" 또는 "does"의 "do"를 찾습니다. ?는 {0,1}과 같습니다.

{n}

n은 음이 아닌 정수입니다. 정확히 n개 찾습니다. 예를 들어, 'o{2}'는 "Bob"의 "o"는 찾지 않지만 "food"의 o 두 개는 찾습니다.

{n,}

n은 음이 아닌 정수입니다. 정확히 n개 찾습니다. 예를 들어, 'o{2}'는 "Bob"의 "o"는 찾지 않지만 "foooood"의 모든 o는 찾습니다. 'o{1,}'는 "o+"와 같고, 'o{0,}'는 "o*"와 같습니다.

{n,m}

mn은 음이 아닌 정수입니다. 여기서 mn보다 크거나 같습니다. 최소 n개, 최대 m개 찾습니다. 예를 들어, "o{1,3}"은 "fooooood"의 처음 세 개의 o를 찾습니다. "o{0,1}"은 "o?"와 같습니다. 쉼표와 숫자 사이에는 공백을 넣을 수 없습니다.

?

이 문자가 다른 한정 부호(*, +, ?, {n}, {n,}, {n,m}) 의 바로 뒤에 나올 경우 일치 패턴은 제한적입니다. 기본값인 무제한 패턴은 가능한 많은 문자열을 찾는 데 반해 제한적인 패턴은 가능한 적은 문자열을 찾습니다. 예를 들어, "oooo" 문자열에서 "o+?"는 "o" 한 개만 찾고, "o+"는 모든 "o"를 찾습니다.

.

"\n"을 제외한 모든 단일 문자를 찾습니다. "\n"을 포함한 모든 문자를 찾으려면 '[.\n]' 패턴을 사용하십시오.

(pattern)

pattern을 찾아 검색한 문자열을 캡처합니다. 캡처한 문자열은 VBScript의 경우 SubMatches 컬렉션, Jscript의 경우 $0...$9 속성을 이용하여 결과로 나오는 Matches 컬렉션에서 추출할 수 있습니다. 괄호 문자인 ( )를 찾으려면 "\(" 또는 "\)"를 사용하십시오.

(?:pattern)

pattern을 찾지만 검색한 문자열을 캡처하지 않습니다. 즉, 검색한 문자열을 나중에 사용할 수 있도록 저장하지 않는 비캡처 검색입니다. 이것은 패턴의 일부를 "or" 문자(|)로 묶을 때 유용합니다. 예를 들어, 'industr(?:y|ies)는 'industry|industries'보다 더 경제적인 식입니다.

(?=pattern)

포함 예상 검색은 pattern과 일치하는 문자열이 시작하는 위치에서 검색할 문자열을 찾습니다. 이것은 검색한 문자열을 나중에 사용할 수 있도록 캡처하지 않는 비캡처 검색입니다. 예를 들어, "Windows(?=95|98|NT|2000)"는 "Windows 2000"의 "Windows"는 찾지만 "Windows 3.1"의 "Windows"는 찾지 않습니다. 예상 검색은 검색할 문자열을 찾은 후 예상 검색 문자열을 구성하는 문자 다음부터가 아니라 마지막으로 검색한 문자열 바로 다음부터 찾기 시작합니다.

(?!pattern)

제외 예상 검색은 pattern과 일치하지 않는 문자열이 시작하는 위치에서 검색할 문자열을 찾습니다. 이것은 검색한 문자열을 나중에 사용할 수 있도록 캡처하지 않는 비캡처 검색입니다. 예를 들어, "Windows(?!95|98|NT|2000)"는 "Windows 3.1"의 "Windows"는 찾지만 "Windows 2000"의 "Windows"는 찾지 않습니다. 예상 검색은 검색할 문자열을 찾은 후 예상 검색 문자열을 구성하는 문자 다음부터가 아니라 마지막으로 검색한 문자열 바로 다음부터 찾기 시작합니다.

x|y

x 또는 y를 찾습니다. 예를 들어, "z|food"는 "z" 또는 "food"를 찾습니다. "(z|f)ood"는 "zood" 또는 "food"를 찾습니다.

[xyz]

문자 집합입니다. 괄호 안의 문자 중 하나를 찾습니다. 예를 들어, "[abc]"는 "plain"의 "a"를 찾습니다.

[^xyz]

제외 문자 집합입니다. 괄호 밖의 문자 중 하나를 찾습니다. 예를 들어, "[^abc]"는 "plain"의 "p"를 찾습니다.

[a-z]

문자 범위입니다. 지정한 범위 안의 문자를 찾습니다. 예를 들어, "[a-z]"는 "a"부터 "z" 사이의 모든 소문자를 찾습니다.

[^a-z]

제외 문자 범위입니다. 지정된 범위 밖의 문자를 찾습니다. 예를 들어, "[^a-z]"는 "a"부터 "z" 사이에 없는 모든 문자를 찾습니다.

\b

단어의 경계, 즉 단어와 공백 사이의 위치를 찾습니다. 예를 들어, "er\b"는 "never"의 "er"는 찾지만 "verb"의 "er"는 찾지 않습니다.

\B

단어의 비경계를 찾습니다. "er\B"는 "verb"의 "er"는 찾지만 "never"의 "er"는 찾지 않습니다.

\cx

X 가 나타내는 제어 문자를 찾습니다. 예를 들어, \cM은 Control-M 즉, 캐리지 리턴 문자를 찾습니다. x 값은 A-Z 또는 a-z의 범위 안에 있어야 합니다. 그렇지 않으면 c는 리터럴 "c" 문자로 간주됩니다.

\d

숫자 문자를 찾습니다. [0-9]와 같습니다.

\D

비숫자 문자를 찾습니다. [^0-9]와 같습니다.

\f

폼피드 문자를 찾습니다. \x0c와 \cL과 같습니다.

\n

줄 바꿈 문자를 찾습니다. \x0a와 \cJ와 같습니다.

\r

캐리지 리턴 문자를 찾습니다. \x0d와 \cM과 같습니다.

\s

공백, 탭, 폼피드 등의 공백을 찾습니다. "[ \f\n\r\t\v]"와 같습니다.

\S

공백이 아닌 문자를 찾습니다. "[^ \f\n\r\t\v]"와 같습니다.

\t

탭 문자를 찾습니다. \x09와 \cI와 같습니다.

\v

수직 탭 문자를 찾습니다. \x0b와 \cK와 같습니다.

\w

밑줄을 포함한 모든 단어 문자를 찾습니다. "[A-Za-z0-9_]"와 같습니다.

\W

모든 비단어 문자를 찾습니다. "[^A-Za-z0-9_]"와 같습니다.

\xn

n을 찾습니다. 여기서 n은 16진수 이스케이프 값입니다. 16진수 이스케이프 값은 정확히 두 자리여야 합니다. 예를 들어, '\x41'은 "A"를 찾고 '\x041'은 '\x04'와 "1"과 같습니다. 정규식에서 ASCII 코드를 사용할 수 있습니다.

\num

num을 찾습니다. 여기서 num은 양의 정수입니다. 캡처한 문자열에 대한 역참조입니다. 예를 들어, '(.)\1'은 연속적으로 나오는 동일한 문자 두 개를 찾습니다.

\n

8진수 이스케이프 값이나 역참조를 나타냅니다. \n 앞에 최소한 n개의 캡처된 부분식이 나왔다면 n은 역참조입니다. 그렇지 않은 경우 n이 0에서 7 사이의 8진수이면 n은 8진수 이스케이프 값입니다.

\nm

8진수 이스케이프 값이나 역참조를 나타냅니다. \nm 앞에 최소한 nm개의 캡처된 부분식이 나왔다면 nm은 역참조입니다. \nm 앞에 최소한 n개의 캡처가 나왔다면 n은 역참조이고 뒤에는 리터럴 m이 옵니다. 이 두 경우가 아닐 때 n과 m이 0에서 7 사이의 8진수이면 \nm은 8진수 이스케이프 값 nm을 찾습니다.

\nml

n이 0에서 3 사이의 8진수이고 ml이 0에서 7 사이의 8진수면 8진수 이스케이프 값 nml을 찾습니다.

\un

n은 4 자리의 16진수로 표현된 유니코드 문자입니다. 예를 들어, \u00A9는 저작권 기호(©)를 찾습니다.

[출처] 정규식 - 정규식 컨텍스트,메타문자 - 메타문자의 동작|작성자 판타스트


YOUR COMMENT IS THE CRITICAL SUCCESS FACTOR FOR THE QUALITY OF BLOG POST