[RHEL6] 파일 조작 명령어 3탄(expand, hexdump, join, look, nl)
본문 바로가기
IT 이야기/Linux 명령어

[RHEL6] 파일 조작 명령어 3탄(expand, hexdump, join, look, nl)

by 찬찬이 아빠 2020. 3. 31.
반응형
  11. expand(문서 변환)

 1) 경로 : /usr/bin/expand

 2) 요약 : 탭을 스페이스로 변환

 3) 사용 방법 : expand [옵션] [파일명...]

 4) 옵션

 -t, --tabs=NUMBER : 탭 간격을 조절. 기본값은 8이나, 지정한 숫자에 따라 탭의 간격을 조절할 수 있음

 --help : 사용법 출력

 --version : 버전 정보 출력

 

 5) 추가 설명

expand 명령어는 파일 내의 탭을 지정한 스페이스의 수로 변환합니다. 예를 들어 아래 내용을 가진 test 파일이 있습니다.

 

첫 줄은 탭이 스페이스로 변하는 것을 확인하기 위해, 단어 사이에 탭 한개와 같은 너비를 갖는 3개의 스페이스를 두었습니다. 두 번째 줄은 탭 한개로 단어를 띄어 놓았고, 세 번째 줄은 탭 세개로 단어 사이를 띄어 놓았습니다.

# cat test
Hello   World! : 3 spaces
Hello World! : 1 tab
Hello World! : 3 tabs

 

이 파일에 포함된 탭을 스페이스로 변환해 봅니다. -t 1은 탭을 스페이스 1개로 변환하라는 옵션입니다.

# expand -t 1 test
Hello   World! : 3 spaces
Hello World! : 1 tab
Hello   World! : 3 tabs

 

3개의 탭을 갖고 있던 세 번째 줄은 3개의 스페이스로 변환하여 첫 번째 줄과 단어 사이 간격이 같아 진 것을 확인할 수 있습니다.

 

 

 

  12. hexdump(문자열 변환)

 1) 경로 : /usr/bin/hexdump

 2) 요약 : 파일이나 표준 입력 내용을 변환

 3) 사용 방법 : hexdump [옵션] 파일

 4) 옵션

 -b : 파일의 내용을 8진수 형식으로 1바이트씩 출력. 하나의 16진수 입력 오프셋과 열여섯 개의 8진수 형태의 열 형식으로 출력

 -c : 파일의 내용을 문자로 1바이트씩 출력. 하나의 16진수의 입력 오프셋과 열여섯 개의 문자 형태의 열 형식으로 출력

 -C : 파일의 내용을 8진수 및 ASCII 형식으로 출력. 하나의 16진수의 입력 오프셋과 열여섯 개의 16진수 형태의 열, 그리고 17 바이트의 %_P 포맷 형식으로 출력

 -d : 파일의 내용을 10진수 형식으로 2바이트씩 출력. 한 줄은 16진수의 입력 오프셋과 여덟 개의 십진수 형태의 열 형식으로 출력

 -e format_string : 출력할 내용의 포맷 스트링을 지정

 -f format_file : 출력 형식을 가지고 있는 포맷 파일을 지정. 이 파일은 하나 이상의 ₩n 포맷 문자를 포함

 -n length : 지정한 길이 만큼의 바이트만 해석

 -o : 8진수 형식으로 2 바이트씩 출력. 라인은 하나의 16진수의 입력 오프셋과 여덟 개의 8진수 형태의 열 형식으로 출력

 -s offset : 입력의 시작에 오프셋 정보를 생략. 옵션을 지정하지 않으면 오프셋을 10진수로 출력

 -v : 모든 입력 데이터를 출력

 -x : 16진수 형식으로 2바이트씩 출력. 하나의 16진수의 입력 오프셋과 여덟 개의 16진수 형태의 열 형식으로 출력

 

 5) 추가 설명

hexdump 명령어는 지정한 파일이나 표준 입력에서 사용자가 지정한 형식으로 출력합니다. 포맷 문자열은 공백 문자로 구분되어 여러 포맷 단위로 나누어집니다. 하나의 포맷 단위는 반복 횟수, 바이트 횟수, 포맷 형식으로 구성됩니다.

 

반복 횟수는 양의 정수로만 설정할 수 있으며 초기값은 1입니다. 포맷의 반복 횟수만큼 출력합니다. 바이트 수는 양의 정수로만 설정할 수 있으며 지정한 바이트 수를 변경하면 반복 횟수를 다시 계산하여 읽습니다. 반복 횟수와 바이트 수 모두를 사용하면 슬래시(/)로 구분합니다. 슬래시의 앞뒤의 공백 문자는 무시됩니다. 포맷은 따옴표("")로 묶여져야 합니다.

 

아래는 지정한 파일의 몯느 내용을 16진수 형식으로 출력하고 있습니다.

# hexdump -v chan.txt | more
000000 0a0a 3032 3930 312d 2d32 3230 3120 3a39
000010 0a0a 3035 4931 313d 5d32 4a30 3120 2a39
000020 0a0a 65d3 3e31 512a ad32 3b31 4120 3a39
000030 0a0a 3132 413c 614d 2e32 72e0 c820 14f9
000040 0a0a 2ad3 8910 3621 13a2 8e30 3520 3a2b
000050 0a0a 3331 9a1e 212d 3d42 4230 e130 5239
000060 0a0a 40e1 56c1 3822 8d12 3e30 3190 3d7a
000070 0a0a 53ed 4040 317d 2b62 22f0 412d 7a39
000080 0a0a 679e 1234 412a 8d32 3140 3a20 3eb1

 

 

 

  13. join(필드 단위로 파일 합치기)

 1) 경로 : /usr/bin/join

 2) 요약 : 두 파일을 묶어 하나의 파일로 합침

 3) 사용 방법 : join [옵션]... 파일1 파일2

 4) 옵션

 -a 파일넘버 : 지정한 파일을 기준에 맞게 합침

 -e EMPTY : 빠진 필드의 입력은 EMPTY로 대신함

 -i, --ignore-case : 비교 대상 필드가 다를 경우 무시함

 -j FIELD : -1 FILED -2 FILED와 같음

 -j1 FIELD : -1 FILED와 같음

 -j2 FIELD : -2 FIELD와 같음

 -o FORMAT : 포맷 형식에 따라 합쳐진 결과를 출력. 출력 포맷은 콤마(,)나 공백으로 구분해서 "파일이름.필드" 형식으로 지정. 예를 들어 1.2는 첫 번째 파일의 두 번째 필드를 의미

 -t CHAR : 지정한 문자(CHAR)를 구분자로 이용

 -v 파일넘버 : 지정한 파일을 기준으로 비교하여 다른 필드 내용을 출력

 -1 FIELD : 첫 번째 파일의 지정한 필드 번호를 기준으로 결합하여 출력

 -2 FIELD : 두 번째 파일의 지정한 필드 번호를 기준으로 결합하여 출력

 --help : 사용법 출력

 --version : 버전 정보 출력

 

 5) 추가 설명

join은 두 파일을 의미있는 형태로 묶어 하나의 파일로 만드는 명령어로, 공통된 필드가 있는 줄은 각각을 비교하여 합칩니다. 한 예로 아래와 같이 jointest 파일과 jointest2 파일이 있다고 가정합니다.

# cat jointest
1	one
2	two
3	three
4	four
5	five

# cat jointest2
1	1000
2	2000
4
5	5000

 

첫 번째와 두 번재 파일의 1번째 필드를 기준으로 공통된 내용을 조인하여 출력합니다.

# join jointest jointest2
1 one 1000
2 two 2000
4 four
5 five 5000

 

필드 기준은 -j1이나 -j2 옵션을 통해 변경할 수 있습니다. -j2 1 옵션은 두 번째 파일의 1번째 필드를 기준으로 결합하는 옵션입니다.

# join -j2 1 jointest jointest2
1 one 1000
2 two 2000
4 four
5 five 5000

 

-v 옵션은 두 파일에서 지정한 필드를 기준으로 비교하여 다른 내요을 출력합니다.

# join -v 1 jointest jointest2
3 three

 

 

  14. look(특정 문자로 시작하는 줄 보기)

 1) 경로 : /usr/bin/look

 2) 요약 : 파일에서 주어진 문자로 시작하는 줄만 검색하여 출력

 3) 사용 방법 : look [옵션] 문자 [파일]

 4) 옵션

 -b : 주어진 워드 리스트에서 이진(binary) 검색을 이용

 -d : 알파벳 문자만을 비교 검색

 -f : 알파벳 문자의 대소문자를 구별하지 않음

 -t character : 문자열의 마지막 문자를 지정

 

 5) 추가 설명

look 명령어는 지정한 문자로 시작하는 문자열을 파일에서 검색하여 출력합니다. 바이너리 파일을 검색할 경우는 파일 안의 각각의 라인이 먼저 정렬되어야합니다. 파일을 지정하지 않으면 /usr/share/dict/words 파일 안의 문자열을 검색합니다.

 

대소문자의 구분 없이 검색하려면 -f 옵션을 사용합니다. test라는 텍스트 파일에서 키워드를 검사한 결과입니다.

# look -f hello test
Hello world!!!
hELLo world!!!

 

 

  15. nl(라인 번호 매기기)

 1) 경로 : /usr/bin/nl

 2) 요약 : 텍스트 파일의 각 라인에 번호를 부여

 3) 사용 방법 : nl [옵션[ [파일]

 4) 옵션

 -b, --body-numbering=STYLE : 본문의 스타일(STYLE)을 지정.

 -d, --selection-delimiter=CC : CC를 가지고 논리적인 페이지를 구분. 기본은 ₩:

 -f, --footer-numbering=STYLE : 꼬리말에 지정한 스타일(STYLE)로 페이지 번호를 지정

 -h, --header-numbering=STYLE : 머리말에 지정한 스타일(STYLE)로 페이지 번호를 지정

 -i, --page-increment=num : 지정한 수(num)만큼 논리 페이지를 늘림

 -l(엘), --join-blank-lines=num : 공백 행을 지정한 수(num)만큼 하나의 공백 라인으로 취급

 -n, --number-format=FORMAT : 지정한 형태(FORMAT)로 라인을 추가

 -p, --no-renumber : 새로운 페이지에서 행의 수를 리셋하여 세지 않음

 -s, --number-separator=string : 라인을 구분하는 문자열(string)을 추가

 -v, --first-page=num : 각 페이지의 첫 번째 행의 수(num)를 지정

 -w, --number-width=num : 각 라인의 열 수(num)을 지정

 --help : 사용법 출력

 --version : 버전 정보 출력

 

 5) 추가 설명

nl 명령어는 파일을 읽어 행 번호를 자동적으로 부여합니다. 같은 기능으로 cat -b 명령이 있습니다.

 

아래는 지정 가능한 스타일(STYLE) 유형입니다.

 § a : 모든 라인에 행 번호를 출력

 § t : 빈 공란은 제외한 행 번호를 출력

 § n : 행 번호를 출력하지 않음

 § pBRE : 정규 표현식에 맞는 라인만 행 번호를 출력

 

아래는 지정 가능한 형태(FORMAT) 유형입니다.

 § ln : 0을 제외한 좌측 맨 끝에 행 번호를 출력

 § rn : 0을 제외한 우측 맨 끝에 행 번호를 출력

 § rz : 0을 포함한 우측 맨 끝에 행 번호를 출력

 

# nl /etc/sendmail.cf | more
1 #
2 # Copyright (c) 1998-2001 Sendmail, Inc. and its suppliers.
3 # All rights reserved.
4 # Copyright (c) 1983, 1995 Eric P. Allman. All rights reserved.
5 # Copyright (c) 1988, 1993
6 # The Regents of the University of California. All rights reserved.
7 #
8 # By using this file, you agree to the terms and confditions sset
반응형

댓글