2009-10-29 2 views
1

Java 속성 파일에 변수 대체를 수행하는 스크립트를 작성하고 있는데이 형식은 name = value 형식입니다.Bash loop - 단어가 아닌 라인에서 토큰 화

TEST_ENV_1=test environment variable one 
TEST_ENV_2=http://test.environment.com/one 
#this is a comment with an equal sign=blah 
TEST_ENV_3=/var/log/test/env/2.log 

내 스크립트 등 "테스트 환경 변수 중 하나"로 파일 dest.env에 TEST_ENV_1의 모든 선두로부터 교체 것 :이 같은 source.env, 소스 파일이 있습니다.

내가 한 번에 라인을 처리하는, 그리고 나오지도 또는 그렙 같은 명령의 출력에 반복하는 것이 아니라 전체 라인보다 공백에 토큰 화하기 때문에 문제가 발생 :

$ for i in `sed '/^ *#/d;s/#.*//' source.env`; do 
    echo $i 
    done 
TEST_ENV_1=test 
environment 
variable 
one 
TEST_ENV_2=http://test.environment.com/one 
TEST_ENV_3=/var/log/test/env/2.log 

어떻게 할 그들을 줄로 대우하니? 내가 할 수 있기를 원하는 것은 각 줄을 "="기호로 분리하고 source.env 파일을 기반으로하는 대체 정규 표현식을 사용하여 sed 스크립트를 작성하는 것입니다.

답변

5
sed '/^ *#/d;s/#.*//' source.env | while read LINE; do 
    echo "$LINE" 
done 

대체 방법은 @ Jim의 답변에 따라 $IFS을 변경하는 것입니다. 이 경우 백틱을 피하는 것이 좋습니다. 한 번에 전체 파일을 읽어들이는 반면, sed의 출력을 while으로 파이핑하면 전체 내용을 메모리에서 읽지 않고 한 줄씩 처리 할 수 ​​있습니다. .

+0

굉장한,이 작업 완료. 감사!! – purecharger

+0

사실,이 질문에 간결하게 대답합니다. –