개요 여러가지유틸리티프로그램소개 유닉스 / 리눅스를유용하게활용하도록하기위함 6. 유틸리티활용 파일정렬 파일비교 텍스트변환 정규표현식과 grep 스트림편집기 sed 파일보관및압축 파일탐색 기타파일관련유틸리티 기타유용한명령어 2 6.1 파일정렬 파일병합정렬, 반복줄제거 sort : 파일정렬 $ sort file 줄단위로정렬 ( 오름차순 ) $ sort r file 내림차순정렬 (reverse) $ sort k2 file 필드2부터정렬키로사용 $ sort b k2 file 필드2 앞부분의공백을제외하여사용 $ sort n k4 file 필드4를숫자순서로정렬 $ sort b -k3,3 file 필드3 $ sort -n -k4 -k3 file 필드4를 1차키로, 필드3을 2차키로사용 $ sort -t: -n -k2 file 구분자로문자 : 을사용 ( 기본구분자는공백 ) 옵션상세설명은 p135 표참조 sort m : 파일병합정렬 $ sort m file1 file2 file1, file2가정렬된파일이면 merge 정렬 $ sort file1 file2 보통정렬, -m 옵션을사용한것보다느림 $ sort u file1 정렬결과에서중복된줄은한줄만출력 (sort 와 uniq 를결합한것과유사 ) uniq : 반복줄제거 $ uniq file 중복된줄은한줄만출력 $ sort file uniq 주로정렬과결합하여사용 $ uniq c file 줄의반복횟수출력 $ uniq f 1 file 처음 1필드를제외 (skip) 하고비교 $ uniq w 4 c file 처음 4문자만비교 3 4
6.2 파일비교 파일비교 diff cmp : 파일비교 $ cmp cdata1 cdata2... 두파일비교 cdata1 cdata2 differ: byte 11, line 1 다르면다른처음위치출력 종료코드 1 $ cmp cdata1 cdata1 같으면종료코드 0, 출력없음 $ cmp s cdata1 cdata2 출력없음 ( 종료코드만반환 ) diff : 파일차이점출력 ( 줄단위로 ) 출력형태 (1) 첫째파일에서둘째파일로변환할때의변경목록 (2) C 전처리기에의해서두파일중하나가나오도록두파일을 merge 함. $ diff file1 file2 addition: n1 a n3, n4 > (file2 추가내용 ) deletion: n1,n2 d n3 < (file1 삭제내용 ) change: n1,n2 c n3,n4 < (file1 삭제내용 ) > (file2 추가내용 ) $ diff -Dflag file1 file2 // flag정의 C전처리기사용출력 #ifndef flag (file1 삭제내용 ) #else flag (file2 추가내용 ) #endif 5 6 patch 파일차이점적용 6.3 텍스트변환 patch : diff 명령어출력파일을원본에적용하여수정본으로갱신 tr : 문자변환 표준입력문자를한문자집합에서다른문자집합으로변환 $ diff d1.c d2.c > d12.diff $ cp d1.c d3.c d3.c 는원본과같음 $ patch d3.c d12.diff patch 적용, d3.c 는수정본으로갱신 $ tr a-z A-Z 입력 : stdin, 출력 :stdout $ tr a-c D-E < file 입력 : file $ tr -c a-za-z '\n' < file 알파벳이아닌문자를개행문자로 $ tr -cs a-za-z '\n' < file 변환된문자반복출력제거 $ tr -d abc < file abc문자제거 fmt : 파일포맷지정 줄당문자수, 들여쓰기등 $ fmt file 기본포맷으로출력 ( 줄당최대 75문자 ) $ fmt -w 50 file 출당최대 50문자 $ fmt -s file 짧은줄은그대로 ( 긴줄만분리 ) $ fmt -u file 단어간격 : 한칸 ( 한줄로합칠때는두칸 ) 7 8
텍스트변환 column, cut 텍스트변환 paste, iconv column : 여러열로포맷 $ column file 여러열로만들어출력 ( 세로로먼저나열 ) $ column x file 가로로먼저나열 (cf) ls 와 ls -C $ column t file 여러열로된입력을열단위로정렬 cut : 줄의지정된영역제거, 선택부분만출력 $ cut c 2-10 줄의 2번째부터 10번째문자까지선택 $ cut f1-3,5 d' ' 필드1-3, 5만출력 ( 필드구분자 : 빈칸 ) paste 줄단위병합 $ paste f1 f2 f3 세파일을병합 (1열:f1, 2열 :f2, 3열 :f3), 구분자탭 $ paste d: f1 f2 구분자 : iconv 문자인코딩변환 문자를한인코딩에서다른인코딩으로변환. 한글변환에유용 한글완성형 : euc-kr, 유니코드 : utf-8 $ iconv f euc-kr t utf-8 han > han.out 완성형을 utf-8로 $ file han han.out 파일유형확인 9 10 6.4 정규표현식과 grep 정규표현식 (regular expression) 문자열패턴을나타내는데사용되는표기법 셸의와일드카드와유사하지만형식에차이가있음 vi, grep, sed, awk 등의명령어, perl, python 등의언어에서사용 확장된정규표현식의메타문자 정규표현식의메타문자 정규표현식과일치하는문자열예 교과서 p152 참조 11 12
grep, fgrep, egrep 파일필터 6.5 스트림편집기 sed grep/fgrep/egrep 파일에서주어진패턴을포함한줄만출력 ( 필터 ) 패턴 grep : 정규표현식 egrep : 확장된정규표현식 (grep E 와같음 ) fgrep : 문자열 (grep F 와같음 ) 다른명령어와파이프로결합하여많이사용 $ grep pattern file $ grep 'pattern' file 셸의메타문자가포함된패턴은 ' ' 사용 $ grep w pattern file 단어전체와일치하는줄출력 $ grep v pattern file 패턴을포함하지않는줄출력 $ grep n pattern file 행번호도함께출력 $ grep l pattern file 패턴을포함한파일이름만출력 $ grep e pat1 e pat2 file 여러개의패턴제공 13 sed 미리준비된편집명령어에따라서입력파일을일괄편집하여편집된결과를출력 입력파일 sed sed 스크립트 ( 편집명령어 ) 표준출력 사용형식 편집명령어제공방법 $ sed script file1 인수 $ sed -e script -e script file1 여러개의인수 $ sed -f scriptfile file1 파일 $ sed > outfile 편집된결과를파일로저장 14 sed 편집명령어 주소와주소범위 편집범위지정 없음 : 모든줄에대해서편집수행 3 : 3행 /pat/ : 패턴 pat을포함하는줄 3, 10 : 3행부터 10행까지 /begin/,/end/ : 패턴 begin을포함하는줄부터 end를포함하는줄까지 텍스트치환 $ sed 's/line/row/' file $ sed '1,2/line/row/g' file 모든매칭문자열치환 $ sed 's/^/ /' file 정규표현식패턴, 들여쓰기 $ sed '5s/ *//' file 줄앞의빈칸제거 $ sed '/\<line\>/row/i' file 단어 line을대소문자구분없이치환 15 16
텍스트삭제 $ sed '1,3d' file $ sed '/Line/ d' file $ sed '/line/i d' file $ sed '/one/,/three/d' file 다중편집명령어인수 $ sed -e 's/^/<</' -e 's/$/>>/' file... 줄의앞뒤에 <<, >> 를삽입 파일삽입 $ sed '$r file2' file file의끝에file2 삽입 $ sed '10r file2' file 10행뒤에file2 삽입 텍스트삽입 i (insert), a (append) "sed1" 1i\... 1행앞에두줄삽입 Inserted Line 1\ 마지막줄을제외하고 \ 로끝남 inserted line 2 $ sed -f sed1 file "sed2" $a\... 마지막행 ($) 뒤에한줄삽입 ( 추가 ) Appended Line $ sed -f sed2 file 17 18 셸스크립트에서작성한 sed 명령어 텍스트변경 c (change) "sed3" 1,2c\ Line 1-2 are removed 4c\ the fourth line $ sed -f sed3 sed.in 선택행출력 p (print) $ sed '1,2p' file 선택행출력및편집결과출력 $ sed n '1,2p' file 선택행만출력 ( 편집결과출력없음 ) $ sed n /pat/p' file grep 'pat' file 과같은동작 파일저장 $ sed '1,2w sed.out' file 1,2 행파일저장및편집결과출력 $ sed n '1,2w sed.out' file 1,2 행파일저장 ( 편집결과출력없음 ) $ sed -n -e '/line/w out1' -e '/Line/w out2' sed.in 일부행들을분류저장 sed 편집명령어를셸스크립트에포함하여작성가능 "sed4.sh"... sed 명령어를포함한셸스크립트 #!/bin/sh sed '... 따옴표안에여러줄의편집명령어작성 1i\ Inserted Line 1\ inserted line 2' sed.in $./sed4.sh 19 20