vi 에디터의 동작모드
명령 모드
- 프로그램 시작시 기본 모드
- 커서 이동, 복사 및 다른 모드로 전환할 수 있는 모드
명령행 모드
- 문자열 검색, 치환, 저장, 종료 등의 명령을 수행할 수 있는 모드
입력 모드
비주얼 모드
- 문자, 라인, 블록 단위로 텍스트를 선택하는 모드
프로그램 구동
- vi [options][new or existing file name]
옵션
- -R: 읽기 전용
- -r: 파일 복구 후 편집
- ex) vi -r hello.c
정규식
특정한 패턴의 문자열 집합을 나타내는 식
- 쉘, vi, grep, find, sed을 포함한 다양한 리눅스 프로그램들에서 문자열 패턴을 검색하기 위해 사용됨
- 리눅스에서는 3가지 형식이 존재
- BRE: Basic Regular Expression (default)
- ERE: Extended Regular Expression
- PRCE: Perl Regular Expressions
grep 명령을 사용한 패턴 검색
grep 명령은 파일에서 정규식으로 표현된 패턴에 해당하는 라인을 출력한다
- 형식
- $grep [OPTIONS] PATTERN [FILE…]
- 파일이 주어지지 않으면 stdin에서 입력, -r의 경우에는 재귀적으로 디렉토리를 찾아가며 실행
- 유사명령
- egrep은 ‘grep -E’와 동일하며 ERE를 사용함
- 일반적으로 ERE가 BRE보다 더 많은 기능을 제공하지만 GNU 프로그램들은 BRE와 ERE의 표기형식에 차이가 있을 뿐 기능의 수준은 동일하다
- fgrep은 ‘grep -F’와 동일하며 패턴을 정규식으로 해석하지 않음
- rgrep은 ‘greo -r’과 동일하며 재귀적으로 디렉토리들을 탐색
- 예
- $grep u names.txt: names.txt에서 문자를 포함한 행을출력
- $grep -E ‘o*’ list.txt: list.txt 파일에서 문자 ‘o’를 0개 이상 포함한 행을 출력
문자열 치환
rename 명령과 sed에서의 문자열 치환, vi도 유사함
- ‘s/{pattern}/{string}/[flags]
- {pattern}을 찾아서 {string}으로 대치함
- flag
- i: 대소문자를 가리지 않음
- g: {pattern}이 나타날 때마다 치환을 수행, g가 생략된 경우 1번만 수행함
- 예
- rename ‘s/./-/’ *. # s는 substitute
vi에서 사용
- 문자열 패턴 검색
- /{pattern}: 전방향 검색
- ?{pattern}: 역방향 검색
- n: 다음 매치된 곳으로 이동
- /^{pattern}: 텍스트 라인 시작위치에서 패턴 검색
- /{pattern}$: 텍스트 라인의 끝에서 패턴 검색
- 문자열의 치환
- {range}s/{pattern}/{string}/{flags}
- {range}: 범위 %(모든 라인), k,l(k에서 l라인, $는 마지막 라인), 없으면 현재 라인에서만 치환
- {pattern}: 검색 패턴
- {string}: 문자열
- {flags}: 옵션
- g(동일한 라인에서 패턴이 발견될 떄마다 치환, 디폴트는 맨 앞의 것만 치환됨
- i 대소문자 구분하지 않고 치환
- 예