1. 텍스트 처리

텍스트처리 명령어

  • 문서 내용의 앞부분 출력, (옵션 생략 : 앞 10줄)

주로 쓰는 옵션

  • -c : 바이트만 출력

  • -n : 라인만 출력

$ head /etc/passwd

$ head /etc/passwd -n 15

$ head /etc/passwd -n -5

$ cat /etc/passwd | head

$ cat /etc/passwd | head -n 15

tail

  • 문서 내용의 뒷부분 출력, (옵션 생략 : 뒤에서 10줄)

주로 쓰는 옵션

  • -c : 바이트만 출력

  • -n : 라인만 출력

  • -f : 추가되는 내용 대기. 추가되는 내용은 append하여 출력 (ex, 로그 쌓이는 내용을 바로바로 출력 해줌)

  • -F : 파일이 truncate 되는 경우, re-open하여 follow 함

  • -f,-F 옵션이 모니터링, 디버깅에서 자주 사용됨

$ tail /etc/passwd 

$ tail /etc/passwd -n 3 # 뒤에서 3번째 줄

$ tail /etc/passwd -n +3 # 3번째 줄 부터 출력

$ echo haha > aa

$ tail aa -f

$ echo hihi >> aa

# rm aa 후에는 -f은 따라가지 않음
# rm aa -F : 삭제해도 바로바로 출력 되도록 됨

wc

  • line/word/byte 카운트 출력

주로 쓰는 옵션

  • -l : 라인수만 출력. ex) 한줄에 1개의 설정이 들어가는 경우의 파일 확인 등

# 줄수 워드수 byte
# 19  24 926 /etc/passwd력
# nl, ls 로 확인
$ wc /etc/passwd

# 각 파일별 정보와 마지막 줄 토탈(sum) 정보 출
$ wc /etc/passwd /etc/resolv.conf

# 라인수 출력
$ wc -l /etc/passwd 

# 라인수만 출력
$ wc -l /etc/passwd | awk '{print $1}'

# cut 명령어 활용
$ wc -l /etc/passwd | cut -d ' ' -f 1

nl

  • 파일을 내용을 라인넘버와 함께 출력

주로 쓰는 옵션

  • -ba : 모든 라인에 라인넘버링

  • -v N : 시작라인 넘버를 N으로 지정

$ nl /etc/passwd 

$ nl -v 5 /etc/passwd 

$ nl -ba /etc/passwd

sort

  • 파일 내용 정렬하여출력

주로 쓰는 옵션

위치 지정

  • -k : key에 의한 정렬 수행

  • -t : 필드 구분자 (디폴트-공백)

정렬 기준

  • -n : 숫자

  • -r : 내림차순

  • -f : 무시할 형식지정

  • -u : 중복시 하나만 출력 -> distinct 같은 개념

$ cat /etc/passwd | sort -t: -k 3

$ cat /etc/passwd | sort -t: -k 3 -n

$ cat /etc/passwd | sort -k 2,2 -k 1,1 --debug

$ ls -al | sork -k 5

uniq

  • 중복된 내용 제거하고출력

  • sort 명령어와 같이 사용되는 경우가 많음

주로 쓰는 옵션

  • -d : 중복된 내용만 출력

  • -u : 중복되지 않은 내용만 출력

  • -i : 대소문자 무시하고 중복여부 체크

$ uniq uniq_sample | nl

$ sort uniq_sample | uniq | nl

$ sort uniq_sample | uniq -i | nl

$ grep "r*" * | awk -F: '{print $1}' | uniq

cut

  • 컬럼 잘라내기

주로 쓰는 옵션

  • -b : byte 단위로 선택

  • -c : character 단위로 선택

  • -f : 필드선택

  • -d : tab 대신 사용할 구분자 지정 (ex ':' 등)

$ wc /etc/passwd -l | cut -d ' ' -f 1

$ head /etc/passwd | cut -d: -f 1

$ head /etc/passwd | cut -d: -f 1,3

$ head /etc/passwd | cut -d: -f 1,3,7

$ head /etc/passwd | cut -d: -f 1,7 --output-delimiter=","

$ head /etc/passwd | cut -d: -f 1,7 --output-delimiter=">"

$ head /etc/passwd | cut -d: -f 1,7 --output-delimiter=" = "

# 그 바이트의 값
$ ls -al | head | cut -b 1

# 범위 지정하여 출력가능 
$ ls -al | head | cut -b 1-5

$ ls -al | head | cut -b 10-20

$ ls -al | head | cut -b -20

$ ls -al | head | cut -b 1-

tr

  • 어떤 내용을 변환(translate)한다.

  • 기본 사용법 : tr [option]... SET1 [SET2]

  • 특정 문자를 지울때 자주 쓰임 (replace 처럼)

주로 쓰는 옵션

  • -c, -C, --complement :

  • -d, --delete : 삭제

  • SET

    • CHAR1-CHAR2 : CHAR1 부터 CHAR2 까지 (ex 'a-z')

    • [:alnum:] : 문자 + 숫자

    • [:alpha:] : 문자

    • [:blank:] : 공백

    • [:space:] : 공백 + newline

    • [:digit:] / [xdigit:] : 10진수 숫자 / 16진수 숫자

    • [:lower:] / [:ipper:] : 소문자 / 대문자

$ head /etc/passwd | tr -d '/'

$ head /etc/passwd | tr -d ':'

# : -> % 변환
$ head /etc/passwd | tr ':' '%' 

# 소문자 -> 대문자로 변환 
$ head /etc/passwd | tr [:lower:] [:upper:]

sed

  • stream editor

  • 파일 내용출력 -> 그내용을 수정(editing)

주로 쓰는 옵션

  • n : 기본출력을 하지 않기

  • {RANGE}p : range 내의 라인을 출력(print)

  • {RANGE}d : range 내의 라인을 삭제(delete)

  • /SEARCHPATTERN/p : SEARCHPATTERN과 매치되는 라인을 출력

  • /SEARCHPATTERN/d : SEARCHPATTERN과 매치되는 라인을 삭제

  • s/REGEX/REPLACE/ : REGEX에 매치되는 부분을 REPLACE로 교체 (substitute)

$ head /etc/passwd | sed -n '2,5p'

$ head /etc/passwd | sed '1,5d'

$ head /etc/passwd | sed -n '/games/p'

$ head /etc/passwd | sed '/sy/d'

# 일치하는 1개 변환
$ head /etc/passwd | sed 's/root/ROOT/'

$ head /etc/passwd | sed 's/:/$/'

# 모드 변환
$ head /etc/passwd | sed 's/:/$/g'

# 검색문자열로 부터 10번째 줄까지 출력
$ head /etc/passwd | sed -n '/games/,10p'

# 검색 문자열로부터 2번째 줄까지 출력
$ head /etc/passwd | sed -n '/games/,+2p'

awk

  • 텍스트처리 script language

  • syntax : awk options 'selection _criteria {action }' input-file

주로 쓰는 옵션

  • -F : 필드 seperator 지정

주요 내장 변수

  • $1, $2, $3, ... : N번째 필드

  • NR

  • NF

  • FS

  • RS

  • OFS

  • ORS

$ wc /etc/passwd | awk '{print $1}'

$ wc /etc/passwd | awk '{print $2}'

$ wc /etc/passwd | awk '{print $3}'

$ head /etc/passwd | awk -F: '{print $1}'

$ head /etc/passwd | awk -F: '/sy/ {print}'

$ head /etc/passwd | awk -F: '/sy/ {print $1}'

$ head /etc/passwd | awk -F: '/sy/ {print $4}'

# NR (레코드 넘버) -> 행의 번째 
$ head /etc/passwd | awk -F: '/sy/ {print NR, $1}'
$ head /etc/passwd | awk -F: '{print NR, $1}'

# NF (필드넘버) -> 필드가 몇개 있었는지 
$ head /etc/passwd | awk -F: '{print NR "==> " $1, NF}'

Last updated