Bash
파일 (데이터 스트림, 변수)을 한 행씩 (및 / 또는 필드별로) 읽으십니까?
수색…
매개 변수
매개 변수 | 세부 |
---|---|
IFS | 내부 필드 분리 기호 |
파일 | 파일 이름 / 경로 |
-r | 읽기와 함께 사용할 때 백 슬래시 해석을 방지합니다. |
-t | readarray 읽는 각 줄에서 후행 줄 바꾸기를 제거합니다. |
-d DELIM | 개행 문자 대신 DELIM의 첫 문자가 읽혀질 때까지 계속 read |
파일 (/ etc / passwd)을 한 줄씩 필드별로 읽습니다.
#!/bin/bash
FILENAME="/etc/passwd"
while IFS=: read -r username password userid groupid comment homedir cmdshell
do
echo "$username, $userid, $comment $homedir"
done < $FILENAME
유닉스 패스워드 파일에서, 사용자 정보는 줄 단위로 저장되며 각 줄은 콜론 (:) 문자로 구분 된 사용자에 대한 정보로 구성됩니다. 이 예제에서는 파일을 한 줄씩 읽는 동안 IFS에 지정된 값으로 구분 기호로 콜론 문자를 사용하여 필드를 구분합니다.
샘플 입력
mysql:x:27:27:MySQL Server:/var/lib/mysql:/bin/bash
pulse:x:497:495:PulseAudio System Daemon:/var/run/pulse:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
tomcat:x:91:91:Apache Tomcat:/usr/share/tomcat6:/sbin/nologin
webalizer:x:67:67:Webalizer:/var/www/usage:/sbin/nologin
샘플 출력
mysql, 27, MySQL Server /var/lib/mysql
pulse, 497, PulseAudio System Daemon /var/run/pulse
sshd, 74, Privilege-separated SSH /var/empty/sshd
tomcat, 91, Apache Tomcat /usr/share/tomcat6
webalizer, 67, Webalizer /var/www/usage
한 줄씩 읽고 전체 줄을 변수에 할당하려면 다음을 수정하십시오. 여기에 언급 된 이름 행별로 하나의 변수 만 있습니다.
#!/bin/bash
FILENAME="/etc/passwd"
while IFS= read -r line
do
echo "$line"
done < $FILENAME
샘플 입력
mysql:x:27:27:MySQL Server:/var/lib/mysql:/bin/bash
pulse:x:497:495:PulseAudio System Daemon:/var/run/pulse:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
tomcat:x:91:91:Apache Tomcat:/usr/share/tomcat6:/sbin/nologin
webalizer:x:67:67:Webalizer:/var/www/usage:/sbin/nologin
샘플 출력
mysql:x:27:27:MySQL Server:/var/lib/mysql:/bin/bash
pulse:x:497:495:PulseAudio System Daemon:/var/run/pulse:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
tomcat:x:91:91:Apache Tomcat:/usr/share/tomcat6:/sbin/nologin
webalizer:x:67:67:Webalizer:/var/www/usage:/sbin/nologin
파일의 행을 배열로 읽어들입니다.
readarray -t arr <file
또는 루프 :
arr=()
while IFS= read -r line; do
arr+=("$line")
done <file
줄 단위로 파일 반복
while IFS= read -r line; do
echo "$line"
done <file
파일 끝에 끝에 개행 문자가 포함되어 있지 않으면 다음을 수행하십시오.
while IFS= read -r line || [ -n "$line" ]; do
echo "$line"
done <file
문자열의 행을 배열로 읽어들입니다.
var='line 1
line 2
line3'
readarray -t arr <<< "$var"
또는 루프 :
arr=()
while IFS= read -r line; do
arr+=("$line")
done <<< "$var"
문자열을 줄 단위로 반복
var='line 1
line 2
line3'
while IFS= read -r line; do
echo "-$line-"
done <<< "$var"
또는
readarray -t arr <<< "$var"
for i in "${arr[@]}";do
echo "-$i-"
done
줄 단위로 명령 줄 출력을 통한 루핑
while IFS= read -r line;do
echo "**$line**"
done < <(ping google.com)
또는 파이프와 함께 :
ping google.com |
while IFS= read -r line;do
echo "**$line**"
done
필드로 파일 필드 읽기
필드 구분자가 파일 파일 에서 :
콜론)이라고 가정 해 봅시다.
while IFS= read -d : -r field || [ -n "$field" ]; do
echo "$field"
done <file
내용 :
first : se
con
d:
Thi rd:
Fourth
출력은 다음과 같습니다.
**first **
** se
con
d**
**
Thi rd**
**
Fourth
**
필드로 문자열 필드 읽기
필드 분리 기호가 :
같다고 가정 해 보겠습니다 :
var='line: 1
line: 2
line3'
while IFS= read -d : -r field || [ -n "$field" ]; do
echo "-$field-"
done <<< "$var"
산출:
-line-
- 1
line-
- 2
line3
-
파일의 필드를 배열로 읽어들입니다.
필드 분리 기호가 :
같다고 가정 해 보겠습니다 :
arr=()
while IFS= read -d : -r field || [ -n "$field" ]; do
arr+=("$field")
done <file
문자열 필드를 배열로 읽어들입니다.
필드 분리 기호가 :
같다고 가정 해 보겠습니다 :
var='1:2:3:4:
newline'
arr=()
while IFS= read -d : -r field || [ -n "$field" ]; do
arr+=("$field")
done <<< "$var"
echo "${arr[4]}"
산출:
newline
필드에 의한 명령 필드 출력을 통한 루핑
필드 분리 기호가 :
같다고 가정 해 보겠습니다 :
while IFS= read -d : -r field || [ -n "$field" ];do
echo "**$field**"
done < <(ping google.com)
또는 파이프로 :
ping google.com | while IFS= read -d : -r field || [ -n "$field" ];do
echo "**$field**"
done
Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow