1. 리눅스 파일 출력.
리눅스에서, 텍스트 파일(File)의 내용을 화면에 출력하는 방법 중 가장 쉽고 간단한 방법을 선택하라고 한다면, 어떤 명령를 가장 먼저 떠올리게 될까요? 아마 십중팔구 cat을 생각할 것입니다.
cat 명령을 사용하면, 명령 뒤에 파일명을 적는 것만으로 파일의 모든 내용을 표준 출력(standard output)에 출력할 수 있습니다.
1.1 cat 명령의 동작.
"파일의 내용을 출력"하기 위해 사용하는 cat 명령에 대한 정의를 조금 더 형식적인 문장으로 서술해보면, "cat 명령은 파일(들)을 순서대로 읽고 그 내용을 읽은 순서대로 표준 출력(standard output)에 쓰는 명령"이라고 정의할 수 있습니다. 그리고 cat 명령의 설명에서, cat 명령의 동작을 가장 명료하게 나타내는 단어는 "파일(들)" 이라는 것과 "순서"입니다.
cat 명령의 이름은, "연결 시키다", "연관시키다" 등의 뜻을 가지고 있는 영단어 "concatenate"에서 유래되었습니다. 보통 파일 내용을 출력할 때 cat 명령을 사용하는 걸 생각해보면, 연결이라는 뜻을 가진 "concatenate"라는 단어로부터 유래된 이유가 의아할 수도 있을텐데요.
cat 명령을 가장 많이 사용하는 경우가 파일 내용을 출력할 때이긴 하지만 cat 명령의 진가는 여러 파일을 입력으로 사용하거나, "|"(pipe) 또는 ">"(redirection)과 결합하여 다른 파일과 프로그램을 "연결"할 때 발휘됩니다. 즉, cat 명령은 파일의 내용을 화면에 출력하는 게 목적이 아니라, 하나 이상의 파일을 다른 여러 종류의 파일 또는 프로그램으로 연결시키기 위해 사용한다고 할 수 있습니다. "concatenate" 라는 단어가 가진 뜻대로 말이죠. 결국 파일을 읽어 화면에 출력한다는 것도 파일(FILE)과 표준 출력(stdout)을 연결시키는 것이니, cat이 concatenate로부터 유래된 이유가 마냥 어색하게만 느껴지지는 않을 것입니다.
그리고 cat 명령은 입력된 순서대로 그 내용을 출력합니다. 만약 여러 파일을 입력으로 사용("cat FILE1 FILE2 ...")한다면, 명령줄에 기록된 순서 그대로 출력하게 된다는 것이죠. cat 명령에는 입력에 대한 순서 변경, 필터링, 조작(행 또는 공백 구분과 관련된 일부 기능은 제공)을 위한 옵션이 제공되지 않기 때문에, 좀 더 확장된 기능을 사용하고자 할 때 아쉬움이 느껴질 수도 있을텐데요. 하지만 이러한 단순함이 cat 명령을 리눅스에서 가장 많이 사용되고, 기본이 되는 명령으로 만들어주게 되었다 할 수 있습니다. "concatenate" 라는 단어의 의미처럼, 조금 더 복잡하고 확장이 요구되는 기능은 다른 명령어로 손쉽게 연결(concatenate)시켜서 처리하면 되니까요!
2. cat 명령 옵션
cat 명령은 아래와 같은 사용 형식 및 옵션을 제공합니다.
cat [OPTION]... [FILE]...
OPTION
-n : 모든 라인 앞에 라인 번호 출력. (빈 라인도 번호 출력)
-b : 비어 있지 않은 라인에만 번호 출력.
-E : 라인의 마지막에 $ 기호 출력. (빈 라인도 $ 기호 출력)
-T : 탭 문자를 ^I로 바꿔서 출력.
-s : 두 번 이상 연속된 빈 라인(empty line) 출력 안함.
-v : 탭(TAB)과 줄바꿈(LFD)을 제외한 nonprinting 문자를 ^, M-를 사용하여 표시.
-e : -vE와 결과 같음. 줄바꿈(LFD)을 포함한 nonprinting 문자 표시.
-t : -vT와 결과 같음. 탭(TAB)을 포함한 nonprinting 문자 표시.
-A : -vET와 같음. 탭(TAB), 줄바꿈(LFD)을 포함한 nonprinting 문자 표시.
cat 명령 뒤에 어떠한 옵션도 사용하지 않고 파일 이름만 입력하면, 파일의 내용을 그대로 화면에 출력합니다. 이는 파일이 두 개 이상인 경우도 마찬가지인데요. cat 명령 뒤에 파일 이름을 나열하면, 나열된 순서대로 파일의 내용이 출력됩니다.
$ cat FILE # FILE의 내용을 출력.
$ cat FILE1 FILE2 # FILE1 다음 FILE2 내용을 출력.
만약 파일 이름 대신 "-" 문자를 사용하면, 표준 입력(standard input)을 통해 입력된 내용을 출력할 수 있습니다. (표준 입력으로부터 입력을 완료하기 위해서는 Ctrl + d 키를 입력하면 됩니다.)
$ cat FILE1 - FILE2 # FILE1 출력한 다음 표준 입력(-)으로 입력받은 내용 출력 후 FILE2 내용 출력.
조금 더 자세한 사용법은 아래 예제들을 통해 알아보도록 하겠습니다.
3. cat 명령 사용 예
cat 사용 예cat 명령 옵션
파일 내용 출력 | cat FILE |
파일 생성 | cat > FILE |
라인마다 번호 출력 | cat -n FILE |
라인 끝에 $ 문자 출력 | cat -E FILE |
탭을 ^I 로 출력 | cat -T FILE |
반복된 공백 라인 무시 | cat -s FILE |
파일 복사, 합치기, 추가 | cat FILE > OUT |
파일 사이에 내용 추가 | cat FILE1 - FILE2 |
파일 내용을 페이지 단위로 출력 | cat FILE | more |
파일 내용 필터링 | cat FILE | grep "STR" |
모든 파일 내용 출력 | cat * |
특정 확장자를 가진 파일 내용 출력 | cat *.txt |
3.1 파일의 내용을 화면(표준 출력)에 출력.
cat 명령 뒤에 파일 이름을 나열하면 하나의 파일 또는 여러 파일의 내용을 출력할 수 있습니다.
$ cat FILE1
This is FILE1.
$ cat FILE2
This is FILE2.
$ cat FILE1 FILE2
This is FILE1.
This is FILE2.
3.2 표준 입력(standard input)으로 입력받은 내용을 파일에 쓰기.
cat 명령에 파일 이름을 나열하지 않으면 표준 입력으로 입력된 내용을 표준 출력으로 출력하게 됩니다. 이 때 리다이렉션(redirection, > or >>)을 사용하여 표준 입력으로 입력된 내용을 파일에 쓸 수 있습니다.
실행 순서는 아래와 같습니다.
- 1) "cat > NEWFILE" 명령 실행.
- 2) 내용 입력.
- 3) Ctrl + D 키(EOF, End Of File) 입력.
$ cat > NEWFILE
This is the contents of NEWFILE.
(Ctrl + D)
$ cat NEWFILE
This is the contents of NEWFILE.
3.3 파일 내용 중에서 각 라인 앞에 번호 출력.
cat 명령에 "-n" 옵션을 사용하여, 줄바꿈(LFD)으로 구분되는 각 라인의 시작 부분에 라인 번호를 출력할 수 있습니다.
$ cat A.txt
the first line.
the second line.
the third line.
the fifth line.
$ cat -n A.txt
1 the first line.
2 the second line.
3 the third line.
4
5 the fifth line.
"-b" 옵션을 사용하면, 비어있는 라인에는 번호를 출력하지 않도록 만들 수 있습니다. (위 -n 출력 결과와 비교해 보세요.)
$ cat -b A.txt
1 the first line.
2 the second line.
3 the third line.
4 the fifth line.
3.4 라인 마지막에 구분 문자($) 표시.
"-E" 옵션을 사용하면, 각 라인의 가장 마지막에 "$"로 표시되는 구분 문자를 출력할 수 있습니다.
$ cat A.txt
the first line.
the second line.
the third line.
the fifth line.
$ cat -E A.txt
the first line.$
the second line.$
the third line.$
$
the fifth line.$
3.5 탭(TAB) 문자 대신 "^I" 대신 출력.
파일의 내용에 탭(TAB) 문자가 포함된 경우, 탭을 그대로 출력하는 대신 "^I"를 출력되게 만들 수 있습니다. 탭(TAB)의 경우 화면에 그대로 출력하게 되면 스페이스(SPACE)와의 구분이 쉽지 않을 수 있기 때문에 "^I"로 대신 출력하여 탭 문자를 쉽게 구분되게 만들 수 있습니다. 이 때 "-T" 옵션을 사용합니다.
$ cat FILE.txt
sequence: 1 tab 2 tab 3
1 2 3
$ cat -T FILE.txt
sequence: 1 tab 2 tab 3
1 ^I 2 ^I 3
3.6 두 번 이상 연속된 빈 라인(empty line) 출력 안함.
빈 라인(empty line)이 두 번 이상 연속될 때, 하나의 빈 라인만 출력되게 만들기 위해 "-s" 옵션을 사용합니다.
$ cat B.txt
the first line.
the second line.
the third line.
the seventh line.
$ cat -s B.txt
the first line.
the second line.
the third line.
the seventh line.
3.7 파일 복사, 합치기, 추가.
출력 리다이렉션(redirection)을 사용해 cp 명령처럼 파일을 복사할 수 있습니다.
$ cat FILE
This is FILE.
$ cat FILE > COPIED
$ cat COPIED
This is FILE.
여러 개의 파일을 입력으로 사용하여 하나의 파일로 합칠 수도 있습니다.
$ cat A.txt
This is A.
$ cat B.txt
This is B.
$ cat A.txt B.txt > C.txt
$ cat C.txt
This is A.
This is B.
출력 어펜드(append)를 사용하면 파일의 내용을 다른 파일 뒤에 추가할 수 있습니다. 아래 예제는 위 파일 합치기 예제와 똑같은 동작을 수행합니다.
$ cat A.txt
This is A.
$ cat B.txt
This is B.
$ cat A.txt > C.txt
$ cat B.txt >> C.txt
$ cat C.txt
This is A.
This is B.
3.8 파일 사이에 내용 추가하기.
앞서 "2. cat 명령"에서, cat 명령 다음에 파일 이름 대신 "-" 를 사용하면 표준 입력을 통해 입력받은 내용을 출력할 수 있다고 설명했었습니다. 이 기능을 사용하면, 여러 파일을 합칠 때 파일 사이에 사용자가 원하는 임의의 내용을 추가할 수 있습니다. (사용자 입력을 완료할 때, Ctrl + D (EOF)키를 사용한다는 것을 기억하세요.)
$ cat A.txt
This is A.
$ cat B.txt
This is B.
$ cat A.txt - B.txt > C.txt
==========
$ cat C.txt
This is A.
==========
This is B.
3.9 화면에 표시 가능한 영역을 넘어가는 내용을 페이지 단위로 보기.
cat 으로 출력하고자 하는 내용이 화면 영역보다 많은 경우, cat 명령 결과를 보기 위해 스크롤을 사용해야 하는데요. 이 때, more 명령을 파이프(|)와 결합해서 사용하면, 화면 페이지 단위로 내용을 확인할 수 있습니다.
$ cat /etc/services | more
# Network services, Internet style
#
# Note that it is presently the policy of IANA to assign a single well-known
# port number for both TCP and UDP; hence, officially ports have two entries
# even if the protocol doesn't support UDP operations.
...
...
tacacs 49/udp
--More--
페이지 마지막에 "--More--"라고 표시되어 있는 상태가, cat 명령에 의한 출력을 more 명령에서 페이지 단위로 표시하고 있다는 것을 나타냅니다. 이 상태에서 엔터(ENTER)를 입력하면 한 라인을 추가로 출력하고, 스페이스(SPACE)를 입력하면 다음 페이지를 출력합니다. 모든 내용이 출력되면 자동으로 실행이 종료되며, more 실행 중간에 빠져나오려면 "--More--"가 표시된 상태에서 "q"를 입력하면 됩니다.
3.10 파일 내용 중 특정 문자열이 포함된 라인만 출력.
앞서 cat 명령에는 문자열 검색(필터링) 기능을 위한 옵션이 없다고 말씀드렸는데요. 파이프(|)를 사용해 grep 명령을 조합하여, 파일의 내용 중 특정 문자열이 포함된 라인을 출력할 수 있습니다.
$ cat A.txt
the first line.
the second line.
the third line.
the fifth line.
$ cat A.txt | grep "first"
the first line.
3.11 모든 파일 내용 출력.
cat 명령 다음에 특정 파일 이름 대신 *문자를 사용하여 현재 디렉토리에 있는 모든 파일의 내용을 출력할 수 있습니다.
$ cat FILE1
This is FILE1.
$ cat FILE2
This is FILE2.
$ cat *
This is FILE1.
This is FILE2.
3.12 특정 확장자를 가진 파일 내용만 출력.
* 문자와 특정 문자열을 조합하여 문자열 필터링된 파일 이름을 가진 파일의 내용만 출력할 수 있습니다.
- STR* : STR로 시작하는 모든 파일 내용 출력.
- *STR* : STR이 포함된 모든 파일 내용 출력.
- *STR : STR로 끝나는 모든 파일 내용 출력.
$ ls
A.txt B.txt FILE
$ cat *.txt
This is A.
This is B.
4. cat 명령 사용 예제 정리.
$ cat FILE # 파일 내용 출력.
$ cat > FILE # 파일 생성.
$ cat -n FILE # 라인마다 번호 출력.
$ cat -E FILE # 라인 끝에 번호 출력.
$ cat -T FILE # 탭(TAB)을 ^I로 출력.
$ cat -s FILE # 반복된 공백 라인 무시.
$ cat FILE > OUT # 파일 복사, 합치기, 추가.
$ cat FILE1 - FILE2 > OUT # 파일 사이에 내용 추가.
$ cat FILE | more # 파일 내용을 페이지 단위로 출력.
$ cat FILE | grep "STR" # 파일 내용 필터링.
$ cat * # 모든 파일 내용 출력.
$ cat *.txt # 특정 확장자를 가진 파일 내용 출력.
5. 참고.
- Man7 Linux Manual Page - cat
- [Man7. man. cat] 내용을 참고하세요.
'IT > 리눅스마스터1급' 카테고리의 다른 글
unix , shell, 숫자, 문자 비교, -gt -lt -le -eq -ne (0) | 2023.08.17 |
---|---|
리눅스 find, grep, awk 사용하기 (0) | 2023.08.17 |
Linux - 명령어 결과에서 grep으로 찾은 라인의 위 아래 라인까지 가져오기 (0) | 2023.08.17 |
문자열을 받아들이는 방법과 문자열 가공에 사용되는 명령어 정리. (0) | 2023.08.17 |
리눅스 awk 사용법 (0) | 2023.08.17 |