정규 표현식

개요

정규 표현식(正規表現式, Regular expression에서 줄여서 Regexp 또는 Regex) 특정한 규칙을 가진 문자열의 집합을 표현하는 사용하는 형식 언어이다. 정규 표현식은 많은 텍스트 편집기 프로그래밍 언어에서 문자열의 검색과 치환을 위해 지원하고 있으며, 특히  Tcl 언어 자체에 강력한 정규 표현식 구현을 내장하고 있다.

정규 표현식은 컴퓨터 과학의 정규 언어로부터 유래하였으나 구현체에 따라서 정규 언어보다 넓은 언어를 표현할 있는 경우도 있으며, 심지어 정규 표현식 자체의 문법도 여러 가지 존재하고 있다. 표준화된 것으로는 POSIX 확장 정규 표현식이 있으며, 표준화되지는 않았지만 펄의 정규 표현식과 대체 구현인 PCRE 널리 사용된다.

 

문법

몇몇 문자는 특정한 논리적 관계를 나타내는 기호로 쓰인다. 이를 제외한 나머지 문자는 일반적인 문자를 나타낸다.

§  선택 기호

 "|" 기호는 OR 연산자 기능을 하며 여러 중에서 하나를 선택한다. 예를 들어, "abc|adc" abc라는 문자열과 adc라는 문자열을 모두 포함한다. abc 또는 adc 하나이다.

§  묶기 기호

 "(" ")" 여러 식을 하나로 묶을 있다. "abc|adc" "a(b|d)c" 같은 의미를 가진다.

a(bc)* a, abc, abcbc ‘bc’ 없거나 하나 이상인 경우이다.

a(bc) abcbc 나타낸다.

§  개수 기호

문자 뒤에 붙어 문자의 개수를 나타낸다.

§  "." : 임의의 문자. "a.c" "abc", "aac", "azc" 포함한다. 하지만 ac abbc 안된다.

§  "*" : 바로 앞의 문자가 0 이상. "a*b" "b", "ab", "aab", "aaab" 포함한다.

§  "+" : 바로 앞의 문자가 1 이상. "a+b" "ab", "aab", "aaab" 포함하지만 "b" 포함하지 않는다.

§  "?" : 바로 앞의 문자가 0 또는 1. "a?b" "b", "ab" 포함한다.

§  "{m, n}" : m 이상 n 이하. "a{1,3}b" "ab", "aab", "aaab" 포함하지만, "b" "aaaab" 포함하지 않는다.

이에 따라 "(fa|mo|b?o)ther" "father", "mother", "bother", "other" 나타낸다.

많은 프로그래밍 언어에서는 이를 확장한 문법을 가지고 있다. 일반적으로 사용되는 연산자는 다음과 같다.

§  "[]" 

"[" "]" 사이의 문자 하나를 선택한다. "|" 여러 것과 같은 의미를 가진다. 예를 들면 [abc]d ad, bd, cd 뜻한다. 또한, "-" 기호와 함께 쓰면 문자의 범위를 지정할 있다. "[a-z]" a부터 z까지 하나, "[1-9]" 1부터 9까지 중의 하나를 뜻한다.

§  "[^]" 

"[^" "]" 사이의 문자를 제외한 나머지 하나를 선택한다. 예를 들면 [^abc]d ad, bd, cd 포함하지 않고 ed, fd 등을 포함한다. [^a-z] 알파벳 소문자로 시작하지 않는 모든 문자를 나타낸다.

§  "^",  "$" 

각각 문자열의 처음과 끝을 나타낸다.

“^The” “The” 시작 하는 문자를 말한다

“The end$” “The end” 끝나는 문자열이다.

 

확장 정규 표현식

egrepawk에서 쓰인다.

위에서 설명한 ?, +, \{\}, (), | 등이 이에 해당 된다.

 

POSIX 문자 클래스(POSIX Character Classes)

[:class:]

일치하는 문자의 범위를 지정하는 다른 방법이다.

[:alnum:] 는 알파벳이나 숫자와 일치하고 [A-Za-z0-9] 와 같은 표현입니다.

[:alpha:] 는 알파벳과 일치하고 [A-Za-z] 와 같은 표현입니다.

[:blank:] 는 빈 칸이나 탭과 일치합니다.

[:cntrl:] 는 제어 문자들과 일치합니다.

[:digit:]  10진 숫자들과 일치하고 [0-9] 와 같은 표현입니다.

[:graph:] (출력가능한 그래픽 문자들). 아스키 33 - 126 의 문자들과 일치합니다. 빈 칸 문자가 포함되지 않는다는 것만 제외하고는 밑에서 설명할 [:print:] 와 같습니다.

[:lower:] 는 알파벳 소문자와 일치하고 [a-z] 와 같은 표현입니다.

[:print:] (출력 가능한 문자들). 아스키 32 - 126 까지의 문자들과 일치합니다. 위에서 설명한 [:graph:] 와 같지만 빈 칸 문자가 포함되어 있습니다.

[:space:] 는 공백문자들과 일치합니다(빈 칸, 수평탭).

[:upper:] 는 알파벳 대문자와 일치하고 [A-Z] 와 같은 표현입니다.

[:xdigit:]  16진수 숫자와 일치하고 [0-9A-Fa-f] 와 같은 표현입니다.

 

Posted by linuxism
,

1. USB장치를 리눅스 서버에 꼽는다.


2. USB
장치를 마운트할 마운트 포인트를 생성한다.
# mkdir /mnt/usb


(modprobe명령어로 ide-scsi모듈을 로드한다.)

# modprobe ide-scsi

# lsmod | grep ide-scsi

 

3. 리눅스에서 대부분 USB장치는 /dev/sda 또는 /dev/sdb 또는 /dev/sdc등의 장치명을 사용하는데 현재 리눅스서버에서 사용되고 있지 않은 장치명을 USB장치명으로 사용할수 있다.
어떤 장치명에 할당되었는가를 확인하기 위하여 다음과 같이 "fdisk -l"을 실행해 본다.
# fdisk -l

Disk /dev/sda: 21.5 GB, 21474836480 bytes

255 heads, 63 sectors/track, 2610 cylinders

Units = cylinders of 16065 * 512 = 8225280 bytes

Disk identifier: 0x000dcf45

 

Device Boot      Start         End      Blocks   Id  System

/dev/sda1   *       1        2474    19865600   83  Linux

/dev/sda2        2474        2610     1099193+  82  Linux swap / Solaris

 

Disk /dev/sdb: 8103 MB, 8103395328 bytes

256 heads, 21 sectors/track, 2944 cylinders

Units = cylinders of 5376 * 512 = 2752512 bytes

Disk identifier: 0xc3072e18

 

Device Boot      Start         End      Blocks   Id  System

/dev/sdb1   *           1        2944     7912500    c  W95 FAT32 (LBA)

 

또는 dmesg 로 장치를 확인한다

usbcore: registered new interface driver btusb

usb 1-1: USB disconnect, address 2

usb 1-1: new full speed USB device using uhci_hcd and address 3

usb 1-1: New USB device found, idVendor=043e, idProduct=70d6

usb 1-1: New USB device strings: Mfr=1, Product=2, SerialNumber=3

usb 1-1: Product: USB Flash Drive

usb 1-1: Manufacturer: LG Electronics

usb 1-1: SerialNumber: AA00000000003651

usb 1-1: configuration #1 chosen from 1 choice

Initializing USB Mass Storage driver...

scsi3 : SCSI emulation for USB Mass Storage devices

usbcore: registered new interface driver usb-storage

USB Mass Storage support registered.

usb-storage: device found at 3

usb-storage: waiting for device to settle before scanning

usb-storage: device scan complete

scsi 3:0:0:0: Direct-Access     LGE      USB Drive        1100 PQ: 0 ANSI: 0 CCS

sd 3:0:0:0: Attached scsi generic sg2 type 0

sd 3:0:0:0: [sdb] 15826944 512-byte logical blocks: (8.10 GB/7.54 GiB)

sd 3:0:0:0: [sdb] Write Protect is off

sd 3:0:0:0: [sdb] Mode Sense: 43 00 00 00

sd 3:0:0:0: [sdb] Assuming drive cache: write through

sd 3:0:0:0: [sdb] Assuming drive cache: write through

 sdb: sdb1

 

 

4. USB장치가 /dev/sdb1장치를 사용하는 것을 확인했으므로, 해당 장치를 마운트한다.
# mount -t vfat /dev/sdb1 /mnt/usb


5.
사용이 끝나면 마운트를 해제한다.
# umount /mnt/usb

 

* USB 드라이브에서 한글 깨짐 현상 복구

  mount -t vfat -o iocharset=cp949 /dev/sda1 /mnt/usb

 

부팅 시 자동으로 인식하기 
  vi /etc/fstab
  /dev/sda1 /mnt/usb auto noauto,iocharset=cp949,user 0 0  

 

6.lsmod mount module 사용 상태 확인

mount

# lsmod

Module                  Size  Used by

vfat                    8744  0 

fat                    41836  1 vfat

usb_storage            47064  0 

btusb                  15032  0 

bluetooth              78336  1 btusb

rfkill                 16220  1 bluetooth

iptable_nat             6068  0 

nf_nat                 18008  1 iptable_nat

iptable_mangle          3400  0 

ip6t_REJECT             4620  2 

nf_conntrack_ipv6      17548  2 

ip6table_filter         3168  1 

ip6_tables             11144  1 ip6table_filter

ipv6                  239428  28 ip6t_REJECT,nf_conntrack_ipv6

ppdev                   8200  0 

parport_pc             22748  0 

parport                29300  2 ppdev,parport_pc

i2c_piix4              11968  0 

i2c_core               23160  1 i2c_piix4

pcnet32                28000  0 

mii                     4120  1 pcnet32

floppy                 47700  0 

BusLogic               61932  2 

 

mount

# mount -t vfat /dev/sdb1 /mnt/usb

# lsmod

Module                  Size  Used by

vfat                    8744  1 

fat                    41836  1 vfat

usb_storage            47064  1 

btusb                  15032  0 

bluetooth              78336  1 btusb

rfkill                 16220  1 bluetooth

iptable_nat             6068  0 

nf_nat                 18008  1 iptable_nat

iptable_mangle          3400  0 

ip6t_REJECT             4620  2 

nf_conntrack_ipv6      17548  2 

ip6table_filter         3168  1 

ip6_tables             11144  1 ip6table_filter

ipv6                  239428  28 ip6t_REJECT,nf_conntrack_ipv6

ppdev                   8200  0 

parport_pc             22748  0 

parport                29300  2 ppdev,parport_pc

i2c_piix4              11968  0 

i2c_core               23160  1 i2c_piix4

pcnet32                28000  0 

mii                     4120  1 pcnet32

floppy                 47700  0 

BusLogic               61932  2 

'System > Linux' 카테고리의 다른 글

[이만용의 Open Mind] 프로그래밍 지형도를 바꾸는「파이썬」  (0) 2011.02.07
linux - 정규 표현식  (0) 2011.02.06
TCP wrappers  (0) 2011.01.25
리눅스 - xinetd과 서비스  (0) 2011.01.25
리눅스 - xinetd  (0) 2011.01.25
Posted by linuxism
,
현행 인터넷 주소 바닥났다
NRO, IPv4 주소 잔여 공간 고갈 선언…IPv6로 전환 불가피
입력 : 2011.02.05, 토 09:55 댓글 (0) 추천 (3)
트위터 전송 미투데이 전송 페이스북 전송 싸이월드공감 링크나우 전송 RSS구독 이메일 전송 인쇄하기
 클라우드에 관한 모든 것, Cloud Power!  스마트, 클라우드 & 소셜.. IT Market Insight 2011
전 세계 5개 지역인터넷레지스트리(RIR) 대표단체 NRO(Number Resource Organization)는 IPv4 주소 잔여 공간이 지난 1월3 1일부로 완전히 고갈됐다고 3일(우르과이 현지시간) 발표했다.

전 세계 인터넷주소자원을 할당, 관리하는 IANA(Internet Assigned Numbers Authority)는 지난 31일 마지막 남은 IPv4 기반 2개의 주소 공간을 아시아 태평양 RIR인 APNIC에 할당했다고 전했다.

이는 남아 있는 IANA 풀을 균등하게 5개의 RIR사이에 즉시 할당하는 글로벌 정책을 촉발시켰고, 지난 3일 IANA는 이 블록들을 할당했다. 따라서 이는 더이상 사용할 수 있는 IPv4가 없다는 것을 의미한다.



IANA는 IPv4 주소를 전체 IPv4 주소 공간의 256분의 1에 해당하는 블록으로 RIR에게 할당한다.

각 블록은 '/8' 또는 '슬래시-8.'라고 부른다. 5개 RIR 공동체가 모두 합의하고 지난 2009년, IANA 기능을 책임지는 국제 기관인 ICANN이 인준한 글로벌 정책은 IANA IPv4 이용 가능 풀이 5개의 /8 블록만 남을 경우 이 블록들은 동시에 그리고 균등하게 5개 RIR로 분배하도록 규정하고 있다.

이에 따라 이제부터 전 세계에서 인터넷 주소를 새롭게 생성하려면 IPv6 기반의 주소체계를 할당받아야 한다.

IPv6는 차세대 인터넷 프로토콜로, 현재 우리가 사용하고 있는 인터넷주소체계인 IPv4보다 확장된 주소 공간을 제공한다.

라울 에체베리아 NRO 의장은 "오늘은 인터넷 역사에서 역사적인 날이며 우리가 오랫동안 예상해 왔던 순간이다. 인터넷의 미래는 IPv6이다"라며 소감을 밝혔다.

이어 그는 "인터넷의 모든 관련 당사자들은 이제 IPv6를 전개하기 위한 확고한 조치를 취해야 한다"고 촉구했다.

로드 벡스트롬 ICANN 사장 겸 CEO 역시 "지금은 인터넷의 지속적인 발전을 위한 진정으로 중요한 전환점이다. 아무도 여기에서 벗어날 수 없으며 인터넷 기술 위원회는 상당히 오랫동안 IPv4 고갈에 대해 대비해 왔다"고 의미를 부여했다.

그 역시 "IPv6가 인터넷이 그 놀라운 성장을 지속하고 우리가 기대해 온 글로벌 혁신을 강화하도록 할 수 있는 존재라는 점에서 IPv6의 채택은 지금 정말 중요한 의미를 갖는다"고 강조했다.

각 RIR은 최종 /8 모두를 IANA로부터 기존의 배포할 IP 주소 보유분에 추가해 받게 된다. 접수한 주소 공간 요청에 따라, 이 주소 공간들은 각 RIR을 몇 주부터 몇 달까지 지탱할 수 있게 해줄 것이다.

에체베리아 의장은 "RIR과 ISP들이 IPv4 주소 공간 요청을 거부할 수 밖에 없는 것은 시간 문제일 뿐이다. IPv6 채택은 이제 선택이 아닌 필수"라고 덧붙였다.

IPv6 주소는 지난 1999년부터 사용 가능한 상태이다. IPv6에 대한 추가 정보는 http://www.nro.net/ipv6/ 에서 확인할 수 있으며 주소 공간 확보 방법에 대해서는 현지 RIR에 문의해 확인할 수 있다.

강은성기자 esther@inews24.com
Posted by linuxism
,