검색 엔진의 방문이 늘어나고 있군...

Posted
Filed under 쉘 스크립트
참조 원문 : Unix tip: Using Bash's regular expressions

  버전 3(2004년)부터 bash는 =~ 로 표기하는 내장형 정규 표현식 비교 연산자를 갖추었습니다. 그래서 사실 스크립트에서 grep이나 sed로 하는 작업의 상당수는 이 연산자로 처리할 수 있습니다.

  다른 비교 연산자(-lt, == 등)와 마찬가지로 비교 결과가 참이면 0을 리턴합니다. 아래 예제는 $digit의 값이 하나의 숫자인지를 판별하는 것을 보여주고 있습니다.
if [[ $digit =~ [0-9] ]]; then
    echo '$digit is a digit'
else
    echo "oops"
fi

  아래는 프롬프트에 입력한 값이 숫자만으로 구성되어 있는지를 판별하는 예제입니다.
echo -n "Your answer> "
read REPLY
if [[ $REPLY =~ ^[0-9]+$ ]]; then
    echo Numeric
else
    echo Non-numeric
fi

  Bash의 정규 표현식도 상당히 복잡하게 응용해서 사용할 수 있습니다. $email 변수의 값이 이메일 주소 형식인지를 판별하는 예제입니다. 첫 번째 표현식(계정명)은 문자, 숫자, 일부 특수 문자를 받습니다. 첫 번째 ]의 오른쪽에 있는 +는 앞의 표현식에 해당하는 문자를 몇 개든지 받는다는 뜻입니다. 그 뒤에는 계정명과 이메일 도메인 사이에 @ 문자가 있는지 확인합니다. 그리고 도메인 명의 앞부분과 뒷부분 사이에 점(\.)이 있는지 확인합니다.
if [[ "$email" =~ "^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,4}$" ]]
then
    echo "This email address looks fine: $email"
else
    echo "This email address is flawed: $email"
fi

  아래는 변수의 값이 IP 주소 형태인지를 판별하는 예제입니다.
#!/bin/bash

if [ $# != 1 ]; then
    echo "Usage: $0 address"
    exit 1
else
    ip=$1
fi

if [[ $ip =~ ^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$ ]]; then
    echo "Looks like an IPv4 IP address"
elif [[ $ip =~ ^[A-Fa-f0-9:]+$ ]]; then
    echo "Could be an IPv6 IP address"
else
    echo "oops"
fi

  또한 bash는 간소화된 루프문을 제공합니다. 100번 루프하고 싶다면 아래의 문법으로 해결할 수 있습니다.
for n in {1..100}
do
    echo $n
done

  아래와 같은 표현식으로 문자나 숫자를 범위로 지정하여 루프를 처리할 수도 있습니다. 꼭 1이나 a부터 시작할 필요는 없으며, 역순으로 처리하는 것도 가능합니다.
{a..z}
{z..a}
{c..f}
{5..25}
{10..-10}

  쉘에서 아래처럼 간단히 확인해볼 수도 있습니다.
$ echo {a..z}
a b c d e f g h i j k l m n o p q r s t u v w x y z
$ echo {5..-1}
5 4 3 2 1 0 -1
2013/07/15 12:42 2013/07/15 12:42
Posted
Filed under 프로그램과 명령어/커맨드 라인 트릭
참조 원문 : Whip Up Regular Expressions With Txt2regex

  txt2regex는 몇 가지 질문에 답하는 것으로 정규식을 생성해주는 bash 스크립트입니다. 2004년을 마지막으로 업데이트가 없어서 아쉽긴 하지만 정규식이 자주 바뀌진 않기에 그럭저럭 쓸 수는 있습니다. bash 스크립트기 때문에 별도의 설치가 필요없는 것도 장점이라 할 수 있겠군요.

  사용법은 간단합니다. 실행해서 물어보는 것에 원하는 만큼 답하여 정규식을 완성한 후 .을 눌러 종료하면 됩니다. 실행하면 기본적으로 요청한 내용에 대한 perl, php, postgres, python, sed, vim의 정규식만 보여주지만 / 를 눌러 다른 여러 프로그램에 대응하는 정규식을 볼 수도 있습니다. 아니면 아예 처음부터 txt2regex--prog 프로그램명 형식으로 실행하여 해당 프로그램의 정규식을 처음부터 볼 수도 있습니다.



2013/06/20 14:21 2013/06/20 14:21