'편집기'에 해당되는 글 2건

  1. 2010.02.24 VI 편집기 활용 명령어
  2. 2009.01.02 Sed(streamlined editor) 명령행 편집 기능
2010. 2. 24. 14:05

VI 편집기 활용 명령어

Vi 시작하기

  • $ vi : vi 시작하기
  • $ vi aaa.txt : aaa.txt 파일을 편집하면서 vi 시작
  • $ vi -R aaa.txt : 읽기 전용으로 열기
  Esc   : 또는 /  
편집상태
명령대기상태
(Esc모드)

명령줄상태
  삽입명령어
i,a,A,I,o,O
  Esc 또는 Enter  
  • 명령대기상태 → 편집상태 : 삽입명령어 (아래참조.)
  • 편집상태 → 명령대기상태 : Esc글쇠.
  • 명령대기상태 → 명령줄상태 : : 또는 / (아래참조)
  • 명령줄상태 → 명령대기상태 : Esc 또는 Enter (아래참조)

커서의 이동

  • h, l, j, k : 왼쪽(←, Back space), 오른쪽(→, space), 위(↑), 아래(↓)
  • b, w : 이전 단어의 첫 글자로 / 다음 단어의 첫 글자로 이동.
  • B, W : 이전 단어의 첫 글자로 / 다음 단어의 첫 글자로 이동. (문장부호 무시)
  • e : 다음 단어의 끝 글자로 이동.
  • E : 다음 단어의 끝 글자로 이동. (문장부호 무시)
  • H, M, L : 화면의 맨 위/ 중간 / 맨 아래로
  • 0 : 그 줄의 맨 처음으로 (숫자 0이다.)
  • $ : 그 줄의 맨 끝으로
  • + : 다음 줄의 처음으로
  • - : 윗 줄의 처음으로
  • 3| : 현재 줄의 3번째 열로
  • 4H : 화면 상의 처음 줄부터 4줄 밑으로
  • 4L : 화면 상의 마지막 줄부터 4줄 위로
  • (, ) : 이전 문장의 시작으로 / 다음 문장의 시작으로
  • {, } : 이전 문단의 시작으로 / 다음 문단의 시작으로
  • [[, ]] : 이전 섹션의 시작으로 / 다음 섹션의 시작으로

편집 버퍼를 통한 이동

  • ^F, ^B : 한 화면 앞으로 / 뒤로 (^는 Ctrl글쇠를 의미.)
  • ^D, ^U : 반 화면 앞으로 / 뒤로
  • 4^B : 4화면 위로 이동
  • 4^F : 4화면 아래로 이동
  • 7^U : 7줄 위로 이동
  • 7^D : 7줄 아래로 이동
  • ^Y : 커서는 현재 위치 그대로 화면만 한 줄씩 아래로 이동
  • ^E : 커서는 현재 위치 그대로 화면만 한 줄씩 위로 이동

행 단위 이동

  • :0 : 파일의 첫 번째 행으로 가기 (숫자 0)
  • :10 : 10번째 행으로 가기
  • :$ : 파일의 마지막 행으로 가기
  • G : 파일의 마지막 행으로 가기
  • 10G : 10번째 행으로 가기

삽입명령어

  • i : 커서 위치부터 삽입 시작
  • a : 커서 위치 오른쪽부터 삽입 시작
  • A : 현재 줄의 맨 끝 부터 삽입 시작
  • I : 현재 줄의 맨 처음 부터 삽입 시작
  • o : 커서 아래에 행 삽입
  • O : 커서 위에 행 삽입

삭제명령어

  • x : 현재 커서위치의 한 문자 삭제
  • X : 현재 커서 왼쪽의 한 문자 삭제
  • dd : 한 줄 지우기
  • 4dd : 4 줄 지우기
  • dw : 한 단어 지우기
  • d2w : 2 단어 지우기
  • D : 커서 오른쪽 행 삭제
  • :5 d : 5 째 행 삭제
  • :5,10 d : 5-10 째 행 삭제

파일의 저장 및 종료

  • :wq : 저장 후 vi 종료
  • :w : 저장 (종료는 하지 않고 계속 편집)
  • :q! : 저장하지 않고 vi 빠져나가기
  • :w filename : filename으로 저장 후 계속 편집
  • ZZ : 변경사항 저장 후 vi 종료

내용의 복사 및 이동

  • yy : 현재의 행 복사
  • 5yy : 현재의 행 위치부터 5행 복사
  • p : 아래(오른쪽)에 붙여넣기
  • P : 위(왼쪽)에 붙여넣기
  • f4yy : 현재의 행 위치부터 4행을 'f'라는 이름의 버퍼에 복사
  • fp : 'f'라는 이름의 버퍼에 복사된 내 용을 현재 행 위치에 붙여넣기
  • :3 co 7 : 3 행을 7행 다음으로 복사
  • :1,3 co 7 : 1-3 행을 7행 다음으로 복사
  • :3 m 7 : 3 행을 7행 다음으로 이동
  • :1,3 m 7 : 1-3 행을 7행 다음으로 이동

내용 고치기

  • J : 현재 행과 아래 행 결합
  • 3J : 3줄 합치기
  • u : 이전 명령 취소
  • cw : 단어 변경
  • cc : 행 변경
  • C : 커서 오른쪽의 행 변경
  • s : 커서가 위치한 문자열 대체
  • r : 한 글자만 변경 (입력 모드로 바뀌지 않음)
  • R : 입력하는 대로 겹쳐써서 변경
  • xp : 커서 위치 문자와 오른쪽 문자 교환
  • - : 문자형(대,소문자) 변경
  • U : 행 변경사항 취소
  • :u : 이전의 최종행 취소

명령 취소 및 반복

  • . : 마지막 명령 반복
  • 2. : 마지막 명령 2회 반복
  • u : 마지막 명령 취소
  • U : 현재 줄을 저장

행 번호 설정 및 화면표시

  • :set nu : 행 번호 표시
  • :set nonu : 행 번호 숨기기
  • := : 현재 줄번호 보여주기
  • :/pattern/ = : pattern이 위치한 줄번호 보여주기

시스템이 다운된 후에 파일 되살리기

  • vi -r : 되살릴 수 있는 모든 파일 이름 보여주기
  • vi -r file.txt : vi를 시작하여 지정한 파일 되살리기

다른 파일을 파일 내로 삽입

  • :r filename : 커서 다음에 파일 삽입
  • :20 r filename : 파일을 20번째 행 다음에 삽입

새로운 파일 편집하기

  • :e fine.txt : file.txt 편집하기
  • :e! : 현재의 편집중인 내용 무시하고 가장 최근에 편집한 내용 다시 편집하기

다중 편집하기

    % vi file1 file2 file3
    혹은
    :e file1 file2 file3
    했을 때,
  • :args : 편집 중인 파일목록 보여주기
  • :n[ext] : 다음 파일로 넘어가기
  • :prev[ious] : 이전 파일로 넘어가기 (단 편집 중인 파일이 저장되지 않으면 다음 파일로 넘어갈 수 없다.)

문자열 탐색

  • /aaa : 'aaa' 찾기 (현재 위치부터 뒤로)
  • ?aaa : 'aaa' 역방향 찾기 (현재 위치부터 앞으로)
  • / : 가장 최근에 검색한 문자열 다시 검색
  • ? : 가장 최근에 검색한 문자열 다시 역방향 검색
  • :set noh : 문자열 검색 후 문자열 강조 끄기

치환

vi에서 치환은 정규표현식이 이용된다. (실제로 이 상태에서 실행하는 명령어는 ed나 ex라는 프로그램이 처리하게 된다. 그래서 보통 이 상태를 "ed-모드"라고 한다.) 문서에서 원하는 패턴을 찾으려면 바로 위에 '문자열 탐색'에서 설명된 바와 같이 /문자열 이나 ?문자열 을 사용한다. 문자치환 명령은 다음과 같다.

[형식] :범위s/변경전/변경후/수정자  

'범위'는 명령이 실행될 범위(예: 10,20 이면 10행 부터 20행 까지)를 나타낸다. 's'는 치환(substitute)의 약자이며 '수정자'는 치환 명령의 세부사항을 결정한다. 필요한 것만 뒤에 적어주면 된다. (중복 가능)

  • g (global) - 한 줄에서 일치하는 부분을 여러개 찾았을 때 전부 치환한다. 이것을 사용하지 않으면 처음 것만 치환.
  • c (confirm) - 만족하는 정규표현식을 찾았을 때 치환하기 전에 확인한다.
  • i (ignore-case) - 대소문자를 구별하지 않는다.

"변경전"과 "변경후"에 치환할 내용을 입력한다. "변경전"에 정규표현식을 적는다. 정규표현식으로 ., *, ^, $, [], \(...\), \<...\>, POSIX.2 단축 표현을 사용할 수 있다. 여기서 여러 문자를 묶여서 단위를 만들고 찾은 내용을 기억하는 특수문자가 \(, \)임을 주의해야 한다. 반대로 (, )가 일반문자이다. vim(VI iMproved)에서는 vi에 추가로 |, +, (?와 같은) =, {n,m}을 사용할 수 있지만, 앞에 \ 를 붙여야 한다. 또, vim에는 \i, \k, \p, \s 등의 단축 표현들이 있다.

"변경후"에 \n & 를 사용할 수 있다. \n 는 "변경전"에서 n번째 \(...\) 에 대응하는 부분이고, & 는 "변경전"에 만족한 전체를 나타낸다. 예를 들어,
:%s/\([0-9][0-9]*\) \([Cc]hapter\)/\2 \1/
는 문서에서 12 Chapter같은 부분을 Chapter 12와 같이 치환하고,
:%s/F[1-9][12]*/&/g
는 HTML 문서에서 "F1" ~ "F12"란 단어 모두를 굵은 체로 바꿉니다. (주의! &는 정규표현식의 특수문자는 아니지만 vi의 특수문자이므로, 문자그대로의 &를 사용하려면 대신 \& 를 사용해야 한다.) 이외에도 (뒤를 모두 대문자로) \u 나 (뒤를 모두 소문자로) \l 같은 기능이 있다.

    :%s/aaa/bbb/g - 파일 전체(g)에서 'aaa'을 'bbb' 로 치환
    :%s/^M//g - 파일 전체(g)에서 ^M 을 삭제. ^M은 Ctrl+V+Enter로 입력한다.
    :s/aaa/bbb/ - 현재 행에서 'aaa'을 'bbb' 로 치환
    :1,10 s/aaa/bbb/ - 1행부터 10행 까지 'aaa'을 'bbb' 로 치환
    :1,. s/str/rep/ - 1부터 현재행까지 'aaa'를 'bbb' 로 전부 바꾸기
    :g/감자/s//바위/gc - 각 발생 확인 후 대체

주의할 점은 치환명령어가 / 문자로 각 부분을 구분하기때문에 "변경전"이나 "변경후"에 / 문자를 사용하려면 \/ 같이 써야한다.
필요하다면 / 대신 다른 문자를 사용해도 된다. 예를 들어,
:%s/\/usr\/local\/bin\//\/usr\/bin\//g
대신
:%s#/usr/local/bin/#/usr/bin/#g
가 알아보기 더 쉽다.


출처 : http://cafe.naver.com/autocrat.cafe


Trackback 11 Comment 0
2009. 1. 2. 17:53

Sed(streamlined editor) 명령행 편집 기능

 

Sed(streamlined editor)




ㅇ 제작 : 리눅스포털(www.superuser.co.kr) 수퍼유저코리아 서버


SULINUX 홈페이지 : www.sulinux.net

ㅇ 리눅스포털 홈페이지 : www.superuser.co.kr

Sed(streamlined editor)


sed는 대화형 기능이 없는 편집기이다. 명령행에서 직접 편집 명령어와 파일을 지정하여 작업한 후 결과를 화면으로 확인한다. sed 편집기는 원본을 손상하지 않는다. 리다이렉션을 이용하여 편집 결과를 파일로 저장하여 확인할 수 있다.


1. 주소 지정

주소 지정이란 편집하고자 하는 행을 선택하는 것을 말한다. 이 주소는 숫자나 정규표현식 또는 둘의 조합으로 표현한다. 주소를 지정하지 않은 경우 입력 파일 전체 행에 대하여 작업을 진행한다.

sed ‘1,3p’ datafile

: datafile1행에서 3행까지 출력한다. p는 행을 출력하라는 명령어이다.


sed -n ‘/[Ll]ove/p’ datafile

: datafile에서 Lovelove를 포함하는 행만 출력한다.



2. 명령어와 옵션

2.1 명령어

a\ : 현재 행에 하나 이상의 새로운 행을 추가한다.

c\ : 현재 행의 내용을 새로운 내용으로 바꾼다.

i\ : 현재 행의 위에 삽입한다.

d : 행을 삭제한다.

l : 출력되지 않는 특수문자를 출력한다.

p : 행을 출력한다.

n : 다음 입력 행을 첫 번째 명령어가 아닌 다음 명령어에서 처리하게 한다.

q : sed를 종료한다.

r : 파일로부터 행을 읽어온다.

! : 선택된 행을 제외한 나머지 전체 행에 명령어를 적용한다.

s : 문자열을 치환한다.


2.2 옵션

-e : 다중 편집시 사용.

-f : sed 스크립트 파일 지정에 사용.

-n : 출력을 생략한다.


2.3

다중명령어를 사용하거나 주소 지정이 다른 주소 지정 범위와 중첩되는 경우에는 명령어들을 중괄호안에 넣고, 각 명령어의 끝에 세미콜론을 붙인다.

!는 명령어를 반전하는데 사용한다. 다음 예는 love를 포함하지 않은 행들을 삭제한다.

sed ‘/love/!d’ datafile



3. 메타문자

: grep 등과 마찮가지로 sed는 패턴검색을 위하여 특별한 메타문자를 제공한다.


^ : 행의 시작 지시자

ex) /^love/ : love로 시작하는 행


$ : 행의 끝 지시자

ex) /love$/ : love로 끝나는 행


. : 하나의 문자와 대응

ex) /l..e/ : l 다음에 두 글자가 오고 e로 끝나는 문자열을 포함하는 행


* : 0개 혹은 임의의 임의 갯수

ex) / *love/ : 0개 혹은 임의 갯수의 공백 문자 후에 love로 끝나는 문자열을 포함한 행


[] : [] 사이의 문자 집합중 하나와 대응

ex) /[Ll]ove/ : Love 또는 love를 포함한 행


[^] : 문자 집합에 속하지 않는 한 문자와 대응

ex) /[^A-K]ove/ : A K 사이의 범위에 포함되지 않는 한 문자와 ove가 붙어있는 문자열


\(..\) : 태그로 저장할 수 있는 문자열 지정에 사용.

ex) s/\(lov\)able/\1er/ : 지정된 부분(lov)을 태그 1에 저장하였다가 사용한다. 태그를 참조하기 위해서는 \1을 사용한다. 태그는 9개까지 사용할 수 있다. 예제에서 lovablelover로 치환된다.


& : 검색열을 저장하여 치환열에서 사용할 수 있게한다.

ex) s/love/**&**/ : 검색열 love**love**로 치환된다.


\< : 단어의 시작 지시자

ex) /\<love/ : love로 시작하는 단어를 포함하는 행


\> : 단어의 끝 지시자

ex) /love\>/ : love로 끝나는 단어를 포함하는 행


x\{m\} : 문자 xm번 반복한다.

ex) /a\{5\}/ : a5번 반복


x\{m,\} : 적어도 m번 반복한다.

ex) /a\{5,\}/ : a가 적어도 5번 반복


x\{m,n\} : m회 이상 n회 이하 반복한다.

ex) /a\{5,10\}/ : a5회에서 10회 사이로 반복



4. 예제

4.1 출력 : p

sed ‘/love/p’ datafile

: 기본 설정에서는 모든 행을 표준 출력으로 내보낸다. 패턴 love가 있는 행을 찾으면 그 행을 한 번 더 출력한다.


sed -n ‘/love/p’ datafile

: 기본 설정에 의한 p 명령어의 동작을 제한한다. -n 옵션을 사용하면 love 패턴을 포함하는 행들만 출력한다.



4.2 삭제 : d

sed ‘3d’ datafile

: 3번 행을 삭제한다. 다른 행들은 기본적으로 한번 출력된다.


sed ‘3,$d’ datafile

: 3번 행부터 마지막 행까지 삭제한다. 그리고 나머지 행들이 출력된다.


sed ‘$d’ datafile

: 마지막 행을 삭제한다. 삭제된 행 이외의 모든 행들이 출력된다.


sed ‘/love/d’ datafile

: love를 포함한 모든 행을 삭제하고, 나머지 행들을 출력한다.



4.3 치환 : s

sed ‘s/love/peace/g’ datafile

: lovepeace로 치환한다. g플래그는 행 전체에 치환이 적용됨을 의미한다. g플래그가 없으면 행에서 맨 처음 등장하는 lovepeace로 치환된다.


sed -n ‘s/^love/peace/p’ datafile

: -n 옵션은 p플래그와 같이 사용되어 치환이 일어난 행만 출력한다.


sed ‘s/[0-9][0-9]$/&.5/’ datafile

: &는 검색열에서 지정한 문자열을 대신한다. 즉 두자리 숫자로 끝나는 행은 그 숫자들에 .5가 추가된다.


sed -n ‘s/love/peace/gp’ datafile

: lovepeace로 치환된 행들만 출력한다. -n 옵션이 p 명령어와 함께 사용되어 출력을 간단하게 줄여준다. g플래그는 각 행에서 전체 치환이 일어나게 한다.


sed ‘s#3#99#g’ datafile

: s 명령어 바로 다음에 오는 문자는 검색열과 치환열을 구분해주는 구분자이다. 기본적으로 /를 구분자로 사용하지만, 다른 문자로 바꾸어 쓸 수 있다. 이는 / 자체를 포함하는 문자열을 검색할 때 유용하다.


4.4 행의 선택 범위 : 쉼표(,)

sed -n ‘/love/,/peace/p’ datafile

: love가 나오는 행과 peace가 나오는 행 사이의 모든 행들이 출력된다. lovepeace 다음에 나오면 love가 나오는 행부터 마지막 행까지 출력된다.


sed -n ‘5,/^love/p’ datafile

: 5번째 행부터 love로 시작하는 행까지 출력한다.



4.5 다중 편집 : e

sed -e ‘1,3d’ -e ‘s/love/peace/’ datafile

: 첫 번째 명령은 1행부터 3행까지 삭제하고, 두 번째 명령은 lovepeace로 치환하는 것이다.



4.6 파일로 부터 읽기 : r

sed ‘/love/r newfile’ datafile

: newfile의 내용을 읽어 datafile의 패턴 love를 찾은 곳에 삽입한다. 패턴이 여러번 나오면 매번 중복해서 출력된다.



4.7 파일로 쓰기 : w

sed -n ‘/love/w newfile’ datafile

: love를 포함하는 행들이 newfile에 저장된다.



4.8 붙이기 : a

sed ‘/^love /a\ -----’ datafile

: 패턴 love로 시작하고 공백문자가 있는 행 다음에 명령어 a\뒤의 문자열을 추가한다.



4.9 삽입 : i

sed ‘/love/i\ -----’ datafile

: 패턴 love를 찾은 후 명령어 i\ 다음에 오는 텍스트를 love가 포함된 행 위에 삽입한다.



4.10 종료 : q

sed ‘5q’ datafile

: 5행까지 출력한 후 sed프로그램 종료한다.


sed ‘/love/{ s/love/peace/;q; }’ datafile

: 패턴 love를 찾은 행에서 lovepeace로 치환되고 q 명령어로 sed 종료한다.

다중명령어 처리시 중괄호를 사용하며, 이때 각 명령어의 끝에 세미콜론을 붙인다.


5. 맺음말

이상으로 간단하면서 유용한 sed 편집기에 대하여 알아보았다. 더 자세한 내용은 man페이지를 참조하시라.


Trackback 0 Comment 0