정규표현식 (Regular Expression) 이란 무엇인가? 이 질문은 진짜 어렵다. 너도 나도 정규표현식을 얘기하지만 정작 정규표현식이 뭔지는 잘 안 나와 있다. (오토마타 수업을 들은 풍월로 굳이 얘기하자면 정규 문법에 의해 생성되는 정규 언어를 표현할 수 있는 표현식..이라고 하면 되려나) 어쨌거나, "하나 이상의 문자열을 한 번에 나타낼 수 있는 패턴"이 정규 표현식이다. 아래는 UNIX 서적이나 웬만한 웹사이트에 다 나오는 기본 정규 표현식이다.
a : 말 그대로 "a", b 는 당연히 "b", c 는...
. : 임의의 한 글자. 따라서 a.d 는 aad abd acd add aed afd...
[list] : list 중의 한 글자. 
  [adf] 는 a 또는 d 또는 f
  [a-f] 는 a, b, c, d, e, f
  [^adf] 는 a, d, f 를 제외한 나머지 중 한 글자. list 앞에 "^" 이 오면 뒤에 오는 것을 제외한 것을 의미한다.
  [^a-f] 는.. 말 안 해도 되겠지
 그러면 "^ 또는 a 또는 b"를 의미하고 싶을 때는? "^"를 list 의 제일 앞이 아닌 곳에 두면 된다.
  [ab^] - 마찬가지로 "-" 나 "]" 역시 [ab-] []df] 와 같이 쓴다.
* : 0번 이상의 임의 번 반복. a* 는 null string, a, aa, aaa, aaaa...

그런데 아무래도 저것만 가지고는 좀 불편하다. 그래서 "확장 정규 표현식"이 등장했다.

+ : 1번 이상의 임의 번 반복. a+ 는 a, aa, aaa, ... 즉 aa* 와 동일.
| : a|b 는 a 또는 b
() : group, (ab|cd)ef 는 abef 또는 cdef
? : 없거나 하나 있거나. ab? 는 a 또는 ab

위의 확장 정규 표현식은 Perl에서는 그냥 쓰면 되고, ViEditor 에서는 앞에 백슬래쉬를 붙여 a\+ 와 같이 사용한다.

임의 번 반복 대신이 구체적으로 숫자를 줄 수도 있다.

{n,m} : n번 이상 m번 이하 반복 (가능한 많이)
{n} : n번 반복
{n,} : n번 이상 반복 (가능한 많이)
{,m} : m번 이하 반복 (가능한 많이)
{} : 0 번 이상. * 와 동일

{-n,m} : n번 이상 m번 이하 (가능한 적게)
{-n} : n번
{-n,} : n번 이상 (가능한 적게)
{-,m} : m번 이하 (가능한 적게)
{-} : 0번 이상 (가능한 적게)

역시 vi 에서는 앞에 백슬래쉬를 붙여서 a\{2,5} 등과 같이 사용한다.

위에서 "가능한 많이"와 "가능한 적게"는 뭔가? abcdebcdebcde 라는 예로 들면, a.*d 는 abcdebcdebcd 에 매칭되고, a\{-}d 는 abcd 에 매칭된다.

참고:

Posted by 두장
linux vi 에디터에서 문자(열)을 찾아서 바꾸기
 :(시작줄),(끝줄)s/찾을패턴/바꿀스트링/옵션

- 시작줄, 끝줄 : 바꾸기를 할 범위를 행번호로 지정한다. "."는 현재 커서가 있는 행을 의미, "$"는 제일 마지막 행을 의미한다.
- 찾을 패턴, 바꿀 스트링 : 찾을 패턴은 정규 표현식으로 지정하고, 바꿀 스트링은 string지정한다.
- 옵션 : 
g (global) - 한줄에 일치하는 패턴이 여러개 나오면 모두 바꾼다. 지정하지 않으면 첫번째 패턴만 바꾼다.
i (ignore case) - 대소문자 구분을 하지 않는다
c (confirm) - 검색된 문자열에 대해서 바꿀지 말지를 물어본다.

Example
 :5,10s/a/b/      - 5번째 행부터 10번째 행까지 각 행의 첫번째 "a"를 "b"로 바꾼다.
 :.,.+10s/a/b/g  - 현재 행부터 (현재 행 번호 + 10)번째 행까지 모든 "a"를 "b"로 바꾼다.
 :1,$s/a/b/c     - 첫번째 행부터 마지막 행까지 (즉 문서 전체) 각 행의 "a"를 "b"로 바꾸되, 바꾸기 전 확인을 받는다.
 :%s/a/b/gi      - 문서 전체에서 "a"와 "A"를 "b"로 바꾼다.


Posted by 두장


주말에 날씨가 너무 좋아.....
꽃지 해수욕장에 다녀왔다..
예전에도 꽃지 해수욕장에 와본적이 있긴 하지만
바다에 저런 섬이 있는지 이번에 가서 알았다..


여기는 예산에 있는 예당 저수지...
가끔 말로만 들었었는데...실제로 가보니...
정말 저수지가 엄청 컸다...
그래서 그런지 낚시 하는 사람들도 많고....
아쉬운 것은 바람이 너무 많이 불었다는.거...쩝...

갑자기 아침에 눈이 너무 많이 왔다...
기숙사 옆 산에 눈도 많이 쌓이고...
연구실로 출근 하지 전에 30분동안 열심히 눈사람을 만들어...
기념 사진도..쩝...ㅋ
Posted by 두장
보통의 경우그래픽 카드가 설치되어 있는 컴퓨터나 머신에는 직접 모니터를 연결하여 리눅스를 설치 할 것이다..

그럴 경우 시디롬으로 부팅한 후 부팅 옵션을 입력하는 화면이 나왔을 때 단지 Enter를 입력하거나 

"linux"라고 입력하고 GUI를 통해 리눅스를 설치한다.

하지만 그래픽 카드가 없는 컴퓨터나 머신에서 리눅스를 설치하기 위해서 모니를 직접 연결 할수 없으므로

콘솔을 터미널 서버에 연결해서 리눅스를 설치해야한다. 이때는 GUI를 통해 리눅스를 설치하는 것이 불가능하다..

이때도 똑같이 리눅스 시디를 시디롬에 넣고 시디롬 부팅을 한 후

부팅 옵션을 입력하라는 화면이 나오면 단순히 "linux"라고 해서는 안되고

이때 "linux text console=ttyS0,115200n8" 라고 부팅 옵션을 입력하면
("ttyS0, 115200n8" < -- 이부분은 각각의 머신마다 변경 될수 있다.)

텍스트 형식으로 화면을 보면서 리눅스를 설치할 수 있다.

이때는 설치 과정이 GUI로 마우스로 클릭할수 있는 화면이 아니라

설치과정이 text형식으로 나오기때문에 설치과정에 좀더 유의해야 한다...

Posted by 두장
이전버튼 1 이전버튼