Unix Admin (5) 정규식, pipe, filter, redirection, VI(VIm)

2015. 12. 22. 15:08

정규식 (Regular Expression)

  유닉스 시스템에서 검색을 목적으로 활용


grep [ba]g test

 --> grep bg test 이거나

      grep ag test 인것을 모두 출력 (UNION)


-- 실습

(참고) set list --> 각 행의 마지막을 표시($)



파이프 (pipe)

파이프 문자 앞의 명령어의 표춘 출력을 파이프 뒤의 명령어의 표준 입력으로 전달해 줌



필터(filter)

grep, tail, wc, sort, awk, sed


#wc

wc 파일이름 (no option) line수, word수, byte 를 차례로 출력

wc -l 파일이름 --> line 수

wc -w --> 워드수

wc -c --> byte수

wc -L --> line중 가장 긴 line의 length


활용예) 특정 디렉터리의 파일 및 디렉터리 개수 확인

ls -l /etc | wc -l


 

#리다이렉션

표준 입력, 출력, 에러의 방향을 바꿔줌

표준입력 : 0

표준출력 : 1

표준에러 : 2



cf) sort 명령어

기본적으로 ASCII 코드에 따라 정렬.



#Vi(Vim)

--Vi의 Mode

      EX (명령 모드)    <-->   Normal    <-->   Insert (편집 모드)

-- 다른 이름으로 저장

:wq new_name.txt


-- visual mode (마우스 세팅)

:set mouse=a


-- 여러 창을 동시에 닫을때 qa!


#tag, jump

Ctrl+] ==> 특정 목록(tag)로 이동

Ctrl+O ==> go further back

Ctril+T ==> repeat 


#복사하기, 붙여넣기 (visual mode)

v --> 선택 부분부터 라인 단위로 선택할 수 있음

ctrl+v --> 선택 부분부터 블럭 단위로 선택할 수 있음


y == 복사하기

p == 붙여넣기


#Vim Configuration file (Vi 환경설정 파일 만들기)


vi ~/.vimrc

set nu

set list

:wq


--> :set

세팅된 환경설정을 볼 수 있다.


:version

vi 버전확인


#Vi Navigation (Basic)

Ctrl+E 한 라인씩 내리기

Ctrl+Y 한 라인씩 올리기


w --> 한 단어씩 건너뛰기

W --> 한 단어씩 건너뛰기 (각종 구분자 무시)

e --> 한 단어씩 건너뛰기 (맨 뒷문자)

E -->  한 단어씩 건너뛰기 (맨 뒷문자, 각종 구분자 무시)

b --> 한 단어씩 거꾸로 

B --> 한 단어씩 거꾸로 (각종 구분자 무시)

==> ※대문자는 특수문자까지 묶어서 하나의 word로 인식한다는 것 (공백을 기준으로 이동)


0 --> 라인의 맨 앞으로 오기 (공백포함)

$ --> 라인의 맨 뒤로 가기

^ --> 라인의 맨 앞으로 오기 (라인 첫번째 문자까지)


{ --> 패러그래프 단위로 올라가기

} --> 패러그래프 단위로 내려가기

[[ --> 섹션 단위로 올라기

]] --> 섹션 단위로 내려가기

( --> 문장 단위로 올라가기

) --> 문장 단위로 내려가기


#Vi Navigation (Advanced)

페이지 안에서 커서만 이동하기

H, M, L


커서를 기준으로 스크롤 하기

z (enter) , z (.)(-)


(일반모드)

gg(1G) --> 해당 파일의 시작지점으로 가기

G --> 해당 파일의 끝으로 가기

##% --> 해당 파일의 %부분으로 이동


(명령모드)

:#G (enter) --> #번으로 가기

:0 (enter) --> 첫번째 줄로가기

:$ (enter) --> 맨 끝 줄로가기


set numberwidth=# --> 행 번호 숫자 앞의 여백 크기를 #으로 조절하기



#Vi Navigation (Expert)

:jumps (enter) 자동 북마크(점프) 내용보기

CTRL+O             go further back

CTRL+I              repeat

(여러 파일간에도 적용가능하다)

※jump주소는 상대주소로 매겨짐 (jumps 할때마다 바뀜)


vi +143 README ==> 143번줄부터 열기

vi +/kernel README ==> 위에서부터 첫번째 찾은 kernel 부터 열기

vi +?kernel README ==> 아래서부터 첫번째 찾은 kernel 부터 열기


(응용: 정규표현식 사용)

vi +/^linux /etc/passwd ==> 행 첫번째가 linux인 가장 첫번째 행에서 열기


-- 수동 북마크 하기 (파일 하나)

북마크하기 --> m a (a가 북마크 이름임)

북마크 a 찾아가기 --> ' a (북마크 한 행의 공백없는 가장 첫번째 문자로)

                         ` a (북마크 한 바로 그 컬럼으로 이동)

북마크보기 --> :marks


-- 수동 북마크 하기 (다중 파일)

예제)

vi /etc/passwd /etc/group

글로벌 북마크 하기 --> m P (대문자로)

북마크 P 찾아가기 --> ' P 또는 ` P



#.viminfo 확인하기


vi ~/.viminfo


글로벌 마크, 개별 파일 마크 확인

글로벌 점프, 개별 파일 점프 확인



2일차캡쳐.zip



# vi 명령어

vi -R filename / view filename --> 읽기전용으로 열기

복사 yy

커서 아랫줄에 붙여넣기 p

커서 윗줄에 붙여넣기 P


vi에서 삭제는 잘라내기와 같다.

한줄 잘라내서 아랫줄에 붙여넣기 dd p

한줄 잘라내서 윗줄에 붙여넣기 dd P

한 글자 잘라내서 커서 앞에 삽입 P

한 글자 잘라내서 커서 뒤에 삽입 p

deep --> 두 워드를 잘라내기

! tip (공백에 두고 하면 된다)

! 원리

 d --> 지우겠다

 e --> 해당 단어의 마지막 글자로 이동

 e --> 다시 해당 단어의 마지막 글자로 이동

 p --> 붙여넣기


p, P --> 버퍼에 있는 내용을 붙여넣는것!


#Search 기능

예제) 아래로 찾기 (위로 찾기)

/(?)

linux

n

n

...

* n대신 / (enter), ? (enter)도 가능하다. 단 이건 새로 Search 하는 것임. (효과는 동일)

* 찾단 방향과 역순으로 찾으려면 N N N...


#약어 입력

: ab short long

  --> long에 대해 short으로 약어 설정하기

설정된 약어 보기 : ab (enter)


#줄바꿈 r (enter) --> tip 커서가 위치한 글자가 사라지므로 공백에서 실행할 것

J --> 줄 붙이기


#커서 이동2

공백을 제외한 윗 라인으로 이동

+

공백을 제외한 아래 라인으로 이동

0 --> 해당 라인의 첫번째로 이동 (공백포함)


#잠깐 vi pause 하고 다른 UNIX 명령어 수행

:! (명령어) (enter)

아까 실행했던 명령어 다시 실행

:!! (enter)


#vi 편집중 sh(쉘) 수행하기

:sh (enter)

끝나고 exit (enter) --> vi로 돌아옴

bash 쉘 수행하기

:!bash (enter)

끝나고 exit (enter)


#패턴에 의한 치환

:s/aaa/kkk --> 커서가 위치한 한 줄만 적용됨

여러줄 한번에 적용하기

:1,5s/aaa/kkk --> 1~5줄에 위치한 aaa를 kkk로 변경함

:1,$s/aaa/kkk --> 전체줄에위치한 aaa를 kkk로 변경함

단, 각 줄에 있는 첫번째 패턴밖에 안 바뀐다

전체를 바꾸려면 

:1,$s/aaa/kkk/g

* 참고 :1,$s --> :%s로 쓸 수 있음

확인하면서 바꾸기

:%s/aaa/bbb/c


#data 읽어 오기

:7 r data.txt

-->7번째 줄 아래에 data.txt 내용 삽입 

:r data.txt

--> 번호를 생략할 경우 커서 바로 아랫 line에 내용 삽입

:6 r !ls -l

--> 6번째 line 밑으로 ls -l에 대한 표준 출력 값을 삽입


#삽입(insert, 편집모드)모드로 전환

I --> 현재 line의 가장 앞에 삽입 (공백제외)

A --> 현재 line의 가장 뒤에 삽입 (공백제외)


#수정 완료 후 새 파일 편집하기

e filename 

! tip 현재 파일의 수정 사항을 저장 후 실행해야 함 (아니면 e! 로 강제 종료 가능)


#문자열 수정하기

r 한 글자만 변경

R 커서가 위치한 곳부터 수정모드로 변경

s --> x+i (한 글자 삭제 후 편집모드로 변경)

C --> d+$+a (해당 line에서 끝글자까지 삭제 후 커서가 위치한 곳에서 부터 삽입모드로 변경)

cc 또는 S --> dd+i

~ --> 커서가 위치한 곳의 대.소문자 변경


[visual mode 한정]

:set mouse=a

커서 이동 후 c --> 블록 처리된 곳까지 삭제 된 후 편집모드로 변경됨


#문자열 삭제하기

X --> 커서의 왼쪽 문자 삭제

D --> 커서부터 해당 line 끝까지 삭제 (공백포함)

dG --> 커서가 있는 line 포함하여 파일 끝까지 삭제

d1G --> 커서가 있는 line 포함하여 파일 맨 앞까지 삭제

:line#a d (enter) --> a번 줄 삭제

:line#a, line#b d (enter) --> a번줄 ~ b번줄 전체 삭제


[visual mode 한정]

:set mouse=a

커서 이동 후 d --> 블록 처리된 곳까지 삭제



# 여러줄의 복사와 이동

line#a co line#b --> a번 줄을 b번줄 아래에 복사

line#a, line#b co line#c --> a번 ~ b번줄 전체를 c번줄 아래에 복사
line#a mv line#b --> a번 줄을 잘라내서 b번줄 아래에 붙여넣기
line#a, line#b m line#c --> a번 ~ b번줄 전체를 잘라내서 c번줄 아래에 붙여넣기


#데이터 처리하기

:.![unix명령어] (enter) --> unix명령어 결과를 해당 line부터 출력


#tab 사용하기

(편집모드에서) Ctrl+T == Tab키 --> indent 늘리기

Ctrl+d == indent 줄이기


#여러창 동시에 사용하기

:new [창 이름]

Ctrl+ w, w --> 창 전환하기 (순환식)

Ctrl+ w, j --> 창 전환하기 (아래창으로, 순환 X)

Ctrl+ w, k --> 창 전환하기 (위 창으로, 순환 X)

곰돌곰둘 외부교육정리/4.UNIX Admin (2015.12)