Aller au contenu principal

24. Use Input Output Redirection


개요

이 문서는 sortgrep 같은 유틸리티를 사용하여 Linux에서 입력과 출력을 리다이렉션하는 방법을 설명합니다. 대부분의 Linux 프로그램은 표준 입력(키보드/파일)에서 읽고 표준 출력(터미널)에 쓰지만, 리다이렉션 연산자를 사용하면 이러한 기본 동작을 변경할 수 있습니다.

파일 내용 정렬

sort 유틸리티는 파일을 읽고, 내용을 처리한 후 기본적으로 정렬된 출력을 터미널에 표시합니다.

출력 리다이렉션

> 연산자를 사용하면 명령어 출력을 파일에 저장합니다:

sort file.txt > sorted_file.txt

중요: 이는 기존 파일을 덮어씁니다. 대신 추가하려면 >>를 사용합니다:

date >> file.txt

1 접두사로 표준 출력을 명시적으로 참조할 수도 있습니다:

date 1> file.txt

세 가지 데이터 스트림

Linux 명령어는 세 가지 기본 데이터 스트림을 사용합니다:

  • STDIN: 기본 입력 소스
  • STDOUT: 일반 출력 대상
  • STDERR: 오류 메시지 및 경고 대상

특정 스트림을 리다이렉션할 때 STDOUT에는 1, STDERR에는 2 접두사를 사용합니다.

오류 메시지 리다이렉션

2>를 사용하여 오류를 파일로 보냅니다:

grep -r '^The' /etc/ 2>errors.txt

/dev/null로 리다이렉션하여 오류를 무시합니다:

grep -r '^The' /etc/ 2>/dev/null

출력 스트림 결합

2>&1을 사용하여 STDERR와 STDOUT을 하나의 파일로 병합합니다:

grep -r '^The' /etc/ >all_output.txt 2>&1

중요: 배치 순서가 중요합니다 — 2>&1은 출력 파일 지정 다음에 위치해야 합니다.

입력 리다이렉션

<를 사용하여 키보드 입력을 기대하는 명령어에 파일 내용을 제공합니다:

sendemail [email protected] < emailcontent.txt

히어 문서 및 히어 문자열

**히어 문서(here document)**는 구분자를 사용하여 여러 입력 줄을 전달합니다:

sort <<EOF
6
3
2
EOF

**히어 문자열(here string)**은 단일 줄 입력을 제공합니다:

bc <<< 1+2+3+4

명령어 파이프 연결

파이프(|)는 명령어를 연결하여 한 명령어의 출력을 다른 명령어의 입력으로 전달합니다. 예시:

grep -v '^#' /etc/login.defs | sort | column -t

이는 주석을 제거하고, 출력을 정렬하고, 열로 형식을 지정합니다. 파이핑이 강력한 워크플로우를 가능하게 하는 방법을 보여줍니다.

sed 명령어

sed (Stream EDitor)는 텍스트 스트림이나 파일에서 텍스트를 변환, 삭제, 추출하는 비대화형 편집 도구입니다. 입력을 한 줄씩 읽으면서 지정한 패턴에 따라 처리합니다.

기본 문법

sed [옵션] '명령어' 파일명

주요 예시

텍스트 치환 (s)

# 첫 번째 일치 항목만 치환
sed 's/hello/world/' file.txt

# 줄의 모든 일치 항목 치환 (g 플래그)
sed 's/hello/world/g' file.txt

# 파일을 직접 수정 (-i 옵션)
sed -i 's/hello/world/g' file.txt

# 특정 줄 범위(500~2000)에서만 치환 — 범위는 s 앞에 붙임
sed -i '500,2000s/enabled/disabled/g' /home/bob/values.conf

특정 줄 삭제 (d)

# 3번째 줄 삭제
sed '3d' file.txt

# 주석 줄(#으로 시작) 삭제
sed '/^#/d' file.txt

# 빈 줄 삭제
sed '/^$/d' file.txt

파이프와 함께 사용

# grep 결과에서 연속된 공백을 하나로 줄이기
grep 'error' log.txt | sed 's/ */ /g'

# /etc/login.defs에서 주석·빈 줄 제거 후 정렬
grep -v '^#' /etc/login.defs | sed '/^$/d' | sort
sed vs 리다이렉션

sed는 파이프(|)와 함께 사용하면 강력한 텍스트 처리 파이프라인을 구성할 수 있습니다. -i 옵션 없이는 원본 파일을 수정하지 않고 출력만 변경합니다.