2012-03-20 4 views
4

쉘 스크립트에서 sed를 사용하여 특성 파일의 특성을 바꾸려고합니다. 아래에 나열된 명령은 완벽하게 작동합니다.sed가 regex로 시작하는 라인을 무시했습니다.

sed "s!${KEY}=.*!${KEY}=${NEWVAL}!" infile > outfile 

문제 -이 사람은 주석의 일치하는 "KEY"를 바꿉니다.

예제 파일 :

########### 
#ws.clients=http://abc123.com 
ws.clients=http://123.com 
########### 

스크립트

#!/bin/ksh 
KEY="ws.clients" 
NEWVAL="http://abcd.com" 
sed "s!${KEY}=.*!${KEY}=${NEWVAL}!" infile > outfile 

출력 :

########### 
#ws.clients=http://abcd.com 
ws.clients=http://abcd.com 
########### 

나는 몇 가지 방법을 시도했지만 않네 성공 "#"으로 시작하는 줄을 탈출에 ... 제안?

답변

5

당신은 대체 표현에 조건을 추가 할 수 있습니다

sed "/^[^#]/ s!${KEY}=.*!${KEY}=${NEWVAL}!" infile > outfile 

/^[^#]/은 "라인의 시작에 모든 하지만 파운드 기호"로 읽습니다.

0

당신은 선 경기의 시작부터이

sed "s!^${KEY}=.*!${KEY}=${NEWVAL}!" infile > outfile 

그냥 추가 ^ 그래서 유일한 사람처럼 할 수 있습니다. 위의 ans는 너무 잘 작동해야합니다. 그러나 라인이 space으로 시작하면 같은 문제가 발생합니다.

+0

감사합니다. 중요한 메모로 받아 들일 것입니다. – sid