2014-04-17 1 views
2

파일을 구문 분석하여 여기 저기에 선을 변경하려고합니다. 나는 간단한 루프 같은 있습니다읽기 제거 공간을 중지하는 방법

while read line; do 
    if *condition* then ; 
    echo *someChangedOutput* >> newfile 
    else 
    echo "$line" >> newfile 
    fi 
done < oldfile 

내 문제는 " oldfile"의 라인의 대부분이 선행 공백을 가지고있다. 내가 변수 line로를 읽을 때, 선두 공백이 제거 얻을 - 나는 "$line"에 에코 그래서 누락 " oldfile"인 경우 예를 들어

, "이를 새"

line1 
     line2 
    line3 

은 "이를 새 은"할 수있는 내가 아프에서 라인을 읽는 방법

line1 
line2 
line3 

로 작성되는 선행 공백을 없애지 않고 있습니까?

+0

http://stackoverflow.com/questions/7314044/use-bash-to-read-을 줄 단위 및 줄 계속 공간 –

답변

2

http://mywiki.wooledge.org/BashFAQ/001를 참조하십시오. 당신은 선행 및 후행 공백 오프 제거 피하기 위해 IFS 설정을 해제해야합니다, 당신은 대부분의 아마 또한 -r 사용하려면 :

while IFS= read -r line; do 
    do_something_with "${line}" 
done 
+0

'-r'은 백 슬래시 문자가 이스케이프 문자로 간주되지 않도록합니다. 내 상황에서는 필연적 인 것으로 나타났습니다. – rednectar

0

당신은 특별한 변수 REPLY과 같이 읽을 수 있습니다 :

while read; do 
    if *condition* then ; 
    echo *someChangedOutput* >> newfile 
    else 
    echo "$REPLY" >> newfile 
    fi 
done < oldfile 
+0

downvote의 이유를 알 수 있습니까? 나는 그것을 먼저 시도하지 않고 게시하지 않았을 것이다. – anubhava

관련 문제