05. 파일 검색과 텍스트 처리
05. 파일 검색과 텍스트 처리
1. 문자 코드
- 컴퓨터는 문자를 처리하기 위해서 문자를 2진수로 변환해야 한다. 이렇게 문자를 2진수로 변환하는 체계를 문자 코드라고 한다.
- 아스키(ASCII): 1963년에 미국 표준 협회에서 정보 교환을 위해 만든 미국 표준 코드로 영어 대문자와 소문자, 숫자, 특수문자, 제어 문자들로 구성되며 기본적으로 7비트를 사용하여 0부터 127까지의 숫자로 표현된다.
- 유니코드(Unicode): 영어뿐만 아니라 전 세계의 모든 문자를 컴퓨터에서 처리할 수 있도록 정의한 문자 코드 체계이다.
- UTF-8: 유니코드를 인코딩하는 대표적인 방식으로 유니코드를 1바이트에서 4바이트까지 가변 길이 방식으로 인코딩한다. 기존 아스키 기반 시스템과의 호환성이 뛰어나고, 대부분의 웹페이지와 인터넷 프로토콜에서 사용하고 있다.
2. 파일 및 명령 검색
파일 검색하기: find
- 기능: 지정한 위치에서 검색 조건에 맞는 파일을 찾는다.
- 형식:
find <경로> <검색 조건> <동작>
검색 조건
-name filename: 파일명으로 검색-type filetype: 파일 형식으로 검색b: 블록 장치c: 문자 장치d: 디렉터리p: 네임드 파이프(FIFO)f: 일반 파일l: 심볼릭 링크s: 소켓
-user username: 파일의 소유자로 검색-perm 400: 파일의 접근 권한이 400인 파일을 검색한다.-perm -400: 소유자가 읽기 권한을 가진 모든 파일을 검색한다.-empty: 빈 디렉터리 또는 크기가 0인 파일을 검색한다.-size +#[ckMG]:#에 지정한 크기보다 큰 파일을 검색한다.c: 바이트k: 킬로바이트M: 메가바이트G: 기가바이트
동작
exec <명령> {} \;: 검색된 파일에 명령을 실행한다.find명령으로 찾은 파일의 절대 경로는exec다음의{}위치에 삽입되어 명령이 처리된다.find . -name "*.txt" -exec rm {} \;: 현재 디렉터리에서 파일명이.txt인 파일을 찾아 삭제한다.
-ok 명령 {} \;:exec명령과 동일하지만, 명령을 실행하기 전에 사용자에게 확인 메시지를 보여준다.-print: 검색된 파일의 절대 경로를 출력한다. (기본 동작)-ls: 검색 결과를 긴 목록 형식으로 출력한다.
명령의 위치 찾기: whereis, which
명령과 관련된 파일이 어느 디렉터리에 있는지 검색한다.
3. 파일 내용 검색
정규표현식
정규 표현식(regular expression)은 문자열의 패턴 매칭을 도와주는 특별한 문자들로 구성된다.
- 기본 정규표현식
.: 점의 개수만큼 다른 문자로 대체 (a..b:..에 아무 문자나 대체)^: 문자열의 시작 부분 (^a:a로 시작하는 문자열)$: 문자열의 끝 부분 (a$:a로 끝나는 문자열)*: 앞의 문자가 0회 이상 반복 (a*b:a가 0회이상 반복으로 나오고b가 나오는 문자열)[]: 대괄호 안의 문자 중 하나와 일치 ([abc]:a,b,c중 하나와 일치)
- 확장 정규표현식
?: 앞의 문자가 0회 또는 1회 일치 (a^b:a가 0회 또는 1회 나오고b가 나오는 문자열)+: 앞의 문자가 1회 이상 반복 (a+b:a가 1회 이상 나오고b가 나오는 문자열)|: 두 패턴 중 하나와 일치 (a|b:a또는b와 일치)(): 문자나 패턴을 그룹화하며 한번 만들어진 그룹 재사용 가능 (“(to)ma\1”)
grep
- 기능: 지정한 패턴이 포함된 행을 찾는다.
- 형식:
grep [옵션] [패턴] [파일] - 옵션
-i: 대문자와 소문자를 모두 검색한다.-l: 지정한 패턴이 포함된 파일명을 출력한다.-E: 확장 패턴을 적용한다. (grep -E “e?” test)-F: 정규 표현식을 적용하지 않고 일반 문자로 적용한다. (grep -F ^e test)
4. 파일 정렬과 중복 제거
파일 내용 정렬: sort
- 기능: 텍스트 파일의 내용을 정렬한다.
- 형식:
sort [옵션] 파일 - 옵션
-f: 대소문자를 구분하지 않고 정렬한다.-k#: #에 지정한 필드를 기준으로 정렬한다. (sort -k2 test)-r: 역순으로 정렬한다.-u: 정렬 후에 중복된 내용을 제거한다.-o 파일명: 정렬 결과를 지정한 파일에 저장한다.-t 문자: 지정한 문자를 필드 구분자로 사용한다. (sort -t: -k2 test)
중복 내용 제거: uniq
- 기능: 파일에서 중복 내용을 출력하거나 하나로 합병하여 출력한다. 연속적으로 중복된 행만 중복으로 판단한다.
- 형식:
uniq [옵션] 파일 [결과 파일] - 옵션
-c: 중복 횟수를 각 행의 앞부분에 표시한다.-d: 중복된 행만 한 행으로 출력한다.-i: 중복 여부를 비교할 때 대소문자를 구분하지 않는다.-u: 중복되지 않은 행만 출력한다.
5. 파일 내용 비교
두 파일 내용 비교: diff
- 기능: 두 파일의 내용을 행 단위로 비교한다. 세 파일 (
diff3) - 형식:
diff [옵션] 파일1 파일2 - 옵션
-q: 두 파일에 다른 부분이 있는지만 간단하게 출력한다.-c#: 두 파일의 비교 결과를 #에 지정한 행만큼 출력한다.-r: 디렉터리의 내용을 비교한다.-i: 대소문자를 구분하지 않고 비교한다.
두 파일 내용 비교: cmp
- 기능: 두 파일의 내용을 바이트 단위로 비교한다.
- 형식:
cmp [옵션] 파일1 파일2 - 옵션
-b: 두 파일에서 다른 부분을 바이트로 출력한다.
6. 파일 분할과 병합
파일 분할하기: split
- 기능: 파일을 작은 파일로 분할한다.
- 형식:
split [옵션] 파일 [PREFIX] - 옵션
-b SIZE:SIZE에 지정한 바이트 크기로 파일을 분할한다. (split -b 1K test)-l n:n에 지정한 행만큼씩 파일을 분할한다.
파일 내용 잘라내기: cut
- 기능: 파일에서 일부 열을 추출하여 출력한다.
- 형식:
cut 옵션 파일 - 옵션
-b 범위: 범위로 지정된 바이트를 기준으로 열을 추출한다.-c 범위: 범위로 지정된 문자 수를 기준으로 열을 추출한다. (cut -c1-2 test)-d 구분자: 지정한 구분자로 필드를 구분한다. (cut -d: -f2 test)-f 필드: 지정한 필드를 추출한다. (cut -f2 test)
파일 병합하기: paste
- 기능: 두 파일의 내용을 병합하여 출력한다.
- 형식:
paste [옵션] 파일1 파일2 [파일n] - 옵션
-d 구분자: 필드 구분자를 지정한다.-s: 파일1 다음에 파일2를 병합한다. (각 파일의 내용이 수평으로 나열되며, 행을 구분하여 병합된다.)
This post is licensed under CC BY 4.0 by the author.