DevOps/Linux

리눅스 출력 관련 명령어

아임다디 2022. 3. 30. 15:19

이전 게시글에서는 파이프라인과 리다이렉션을 알아보았다.

출력 관련 명령어를 알아보고 파이프라인과 리다이렉션을 화려하게 써보자

wc : 파일의 라인, 단어, 문자열 개수 count

그냥 wc 명령어만 사용하면 line, word, character의 개수를 모두 출력해주고, 옵션으로 원하는 것만 출력해줄 수도 있다.

wc myfile.txt
wc -l mylife.txt # line의 개수
wc -w mylife.txt # word의 개수
wc -c mylife.txt # character의 개수

wc를 입력했을 때, 차례대로 line, word, character의 결과와 파일 이름이 함께 출력되는 것을 확인할 수 있다

cat : 파일의 컨텐츠를 출력

필자가 가장 많이 사용하는 명령어로, 파일의 컨텐츠 전체를 출력해준다.

cat test.txt # 파일 내용 출력
cat -n test.txt # 내용과 함께 맨 앞에 line 번호 출력

cat -n 으로 라인 넘버까지 출력해준 경우

리다이렉션을 응용해보자. 만약 file1의 내용과 file2의 내용을 합쳐 file3라는 파일에 저장하고 싶다면?

cat file1 file2 > file3
# file1의 내용과 file2의 내용을 합쳐 file3이라는 파일에 저장

head / tail : 파일의 앞/뒤 일부분만 출력

head와 tail은 -n 옵션을 통해 파일의 앞에서부터 또는 뒤에서부터 몇 줄까지 출력할 것인지 정할 수 있다. 디폴트 값은 10라인이다.

tail은 특히 로그를 확인할 때 자주 사용한다 꼭 기억해 둘 것

head test.txt # 파일의 첫 10라인만 출력
tail test.txt # 파일의 마지막 10라인만 출력
head -n 50 test.txt #-n을 이용해 몇 개의 라인까지 출력할건지 정할 수 있음
tail -n 20 test.txt
tail -n +50 test.txt | head -n 5 # 50부터 55라인까지 출력

grep : 특정 문자열 검색

grep은 global regular expression print의 약자로, 특정 문자열을 검색할 때 사용한다.

다른 출력 명령어와 파이프라인을 통해 많이 사용한다.

다양한 옵션이 있으니 원하는 옵션을 잘 활용하면 될 것이다.

grep "문자열" test.txt # 해당 문자열이 있는 line을 모두 출력
grep -c "문자열" test.txt # 해당 문자열이 있는 line이 몇 개인지 출력
grep -n "문자열" test.txt # 해당 문자열이 있는 line의 번호와 내용 출력
grep -v "문자열" test.txt # 해당문자열이 있는 line의 내용을 제외한 모든 내용 출력


grep "^문자열" test.txt # 문자열로 시작하는 라인을 찾아라
grep "문자열$" test.txt # 해당 문자열로 끝나는 라인을 찾아라
grep "c.*h" test.txt # c로 시작해서 h로 끝나는 모든 문자열을 찾아라

sed : 치환 / 삭제

sed는 치환 및 삭제가 가능한 명령어다. 특징은 원본 파일에는 영향을 전혀 주지 않는다.

보고자 하는 파일을 가공해서 더 쉽게 보기 위해 사용한다.

  • 치환
sed 's/addrass/address/' test.txt
# addras를 address로 변경. 원본 파일을 바꾸지는 않고 표준 출력만 한다
sed 's/\t/\ /' text.txt
# tab 문자를 엔터로 변환
  • 삭제
sed '/TD/d' test.txt # td 문자가 포함된 줄을 삭제하여 출력
sed '/Src/!d' test.txt # src 문자가 있는 줄만 지우지 않음
sed '1,2d' test.txt # 처음 1, 2줄을 지움
sed '/^$/d' test.txt # 공백라인을 삭제하는 명령 <- 유용

cut : 파일에서 필드를 뽑아낼 때 사용

여러 옵션과 함께 사용하며, 라인마다 일부분을 추출하여 출력해준다

cut [옵션] [file]
-c 문자위치 : 잘라낼 곳의 글자위치 지정. 콤마나 하이픈으로 범위 지정도 가능
-f 필드 : 잘라낼 필드 정함
-d 구분자 : 필드를 구분하는 문자를 지정. 디폴트는 탭 문자

paste : 텍스트 파일을 수평적으로 join

SQL의 JOIN처럼 텍스트 파일을 수평적으로 Join, Merge하는 명령어다

옵션을 통해 구분자를 지정할 수 도 있다.

-d : 구분자를 지정할 수 있음
$ paste -d ., 1.txt 2.txt
# . 가 구분자

sort : 정렬 명령어

해당 파일을 오름차순으로 정렬(디폴트)하거나, 내림차순으로 정렬하여 출력해준다.

  • -r 옵션 : 내림차순으로 정렬
  • -f 옵션 : 대소문자 구분 안하고 정렬
  • -b 옵션 : 공백문자를 무시하고 정렬

awk : 레코드를 조작하여 출력

파일로부터 레코드를 선택한 뒤, 선택된 레코드에 포함된 값을 조작하거나 데이터화하는 목적으로 사용되는 명령어

awk 옵션 'pattern { action }' 파일

awk '{ print }' text.txt # text.txt의 모든 레코드 출력
awk '/p/' test.txt # text.txt의 p를 포함하는 레코드 출력

find : 원하는 조건의 파일, 디렉토리 검색

해당 명령어도 폴더나 파일 디렉토리를 찾기 위해 많이 사용되는 명령어이다.

find [path] [옵션] 정규식/표현

만약 현재 디렉토리부터 현재 디렉토리 안의 하위 디렉토리까지 모두 찾고 싶으면 path에 .을 넣어주면 된다.
자주 사용되는 옵션은 -name으로, 주어진 이름의 파일이나 디렉토리를 찾고싶을 때 이 옵션을 사용한다.
예를들어, 현재 디렉토리를 시작점으로 text.txt 파일을 찾고싶다면?

find . -name text.txt

less : 파일을 화면에 나눠서 출력

cat과 같이 파일의 내용을 출력해주는 명령어이지만, 한 번에 보여지는 만큼만 읽어서 출력하여 방향키를 누르면 페이지 이동을 하면서 편하게 파일 내용을 볼 수 있다.
엔터키를 누르면 한 줄씩 내려가고, 스페이스 키를 누르면 한 화면씩 넘어간다.
주로 긴 로그같은 파일을 확인할 때 많이 사용한다.

cat test.txt | less
# 한 화면에 다 출력할 수 없는 경우 끊어서 볼 수 있도록 less 명령어 사용 
less test.txt

uniq : 중복된 행 제거

중복된 내용의 행이 연속으로 있으면 하나만 남기고 삭제 해줘 중복된 행을 제거해준다.
sort와 같이 사용하면 좋다.
※ 옵션

  • -c : 같은 라인이 몇 번 나오는지 표시
  • -d : 중복되어 나오는 라인 중 한 라인만 표시
  • -D : 중복되는 모든 라인 표시
  • -N : 필터링을 무시할 라인을 정함. 시작 라인부터 N번째 라인까지는 검사하지 않는다
  • -i : 중복 라인을 한 라인으로 생각하고 출력
  • -u : 중복 라인이 없는 것만 출력

리눅스에서 사용할 수 있는 출력 관련 명령어도 매우 많을 뿐더러 사용할 수 있는 옵션 종류도 굉장히 많다.

해당 명령어에 대한 설명들을 보고싶다면 man 명령어를 통해 내용들을 확인할 수 있다.