Shell script에서 텍스트(txt) 파일을 한 줄씩 읽는 방법에 대해서 알아보겠습니다.

이 글의 예제들은 Ubuntu 20.04에서 Bash shell을 사용하여 작성되었습니다.

1. read로 파일 한 줄씩 읽기

텍스트 파일

예제로 사용될 sample.txt 라는 파일의 내용은 다음과 같습니다.

first
second
third
fourth
fifth

파일 한 줄씩 읽기

그리고, read를 사용하여 아래와 같이 한 줄씩 텍스트를 읽을 수 있습니다.

  • echo "Line $i: $line" : i는 라인 숫자 의미, line은 텍스트 한줄
  • while read line : 파일에서 한줄을 읽어 line에 저장
  • [ -n "$line" ] : -n 옵션은 문자열이 비어있지 않은 경우에 true 리턴, 즉, EOF(End Of File)에 도달했을 때는 while문을 종료하는 목적
  • done < "$file" : 파일을 가져와서 while문에서 사용하겠다는 의미
file="sample.txt"

i=1
while read line || [ -n "$line" ] ; do
  echo "Line $i: $line"
  ((i+=1))
done < "$file"

Output:

$ bash example.sh

2. 전체 텍스트를 하나의 문자열에 할당

cat을 사용하여 파일의 모든 텍스트를 하나의 문자열로 만들 수 있습니다.

아래 예제는 sample.txt의 모든 텍스트(개행 문자를 포함한)를 value에 할당합니다.

#!/bin/bash

value=`cat sample.txt`
echo "$value"

Output:

$ bash example.sh
first
second
third
fourth
fifth

아래와 같이 value=$(<sample.txt)를 사용하여 모든 텍스트를 하나의 문자열에 할당할 수도 있습니다.

#!/bin/bash

value=$(<sample.txt)
echo "$value"

Output:

$ bash example.sh
first
second
third
fourth
fifth