2013-05-28 2 views
15

Unix 셸 스크립팅에서 한 줄씩 파일을 읽으 려합니다. 라인은 선행 및 후행 공백을 포함 할 수 있으며 그 라인에서도 공백을 읽고 싶습니다. 나는 "읽기 라인 동안"을 시도했지만 파일에 라인이있는 경우 명령은 예 :(줄에서 공백 문자를 제거 읽기 : -Unix 셸 스크립팅에서 파일을 한 줄씩 (공백으로) 읽음 - 문제

abcd efghijk 
abcdefg hijk 

라인이 읽어야 등 : - 1) "abcd efghijk" 2) " abcdefg hijk"

무엇 나는 노력이 (가공하지 아니한하는)입니다 : -..

while read line 
do 
    echo $line 
done < file.txt 

내가 거기에 공간과 탭 문자를 포함 라인을 원하는 수있는 방법을 제안 해주십시오

답변

22

이 시도

IFS='' 
while read line 
do 
echo $line 
done < file.txt 

편집 :

당신은 입력에서 백 슬래시 문제를 방지하기 위해 원시 라인을 읽을 수 man bash

IFS - The Internal Field Separator that is used for word 
splitting after expansion and to split lines into words 
with the read builtin command. The default value is 
``<space><tab><newline>'' 
+0

이렇게했습니다. 감사합니다. . IFS에 대해 Plz에 대해 설명하십시오. –

+0

이 (가) 게시물을 업데이트했습니다. – sat

+7

이상하게도 부작용을 피하기 위해 'read'문에 대해서만 빈'IFS'를 지정하면됩니다 :'while IFS = read line' – l0b0

15

에서 (-r 사용) :

while read -r line; do 
    printf "<%s>\n" "$line" 
done < file.txt 

줄 내의 공백을 유지하면서 앞뒤 공백을 제거합니다.

while IFS= read -r line; do 
    printf "%s\n" "$line" 
done < file.txt 

이 같이 빈 IFS를 설정뿐만 아니라 사람들을 유지하려면 지금 한 file.txt가 개행 문자로 끝나는대로 cat < file.txt의 것과 동일합니다.

단어 분리가 줄을 별도의 단어로 분리하지 않도록하려면 "$line"을 큰 따옴표로 묶어야합니다. 따라서 여러 공백 문자 시퀀스가 ​​손실됩니다.

+0

설명해 주셔서 감사합니다. –

+2

@SourabhSaxena 여러분을 환영합니다. Stackoverflow에서 "thanks"를 표현하는 방법은 대답의 왼쪽에있는 위쪽 화살표를 클릭하여 upvote하는 것입니다. – Jens

관련 문제