Post

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.