2017-09-21 1 views
0

/etc/init.d/syslog 파일 (임베디드 시스템에서 사용중인 상자 유형)을 편집하고 싶습니다.SED : 한 줄 일치하고 끝까지 추가

$REMOTE" (큰 따옴표로 끝나야 함)이 포함 된 하나의 행을 찾아이 문자열에 문자열을 추가해야합니다 (끝 큰 따옴표 앞에). 내가 시도

SYSLOG_ARGS="$SYSLOG_ARGS -R $REMOTE -R 172.17.xx.xxx" 

:

그때이 라인에 -R 172.17.xx.xxx을 추가 같은 적절한 따옴표와 라인을 종료 할

SYSLOG_ARGS="$SYSLOG_ARGS -R $REMOTE" 

: 여기

는 전체 문자열
sed -i -e "/$REMOTE\"$/s/\"$/ -R 172.17.87.6\"/" init.d/syslog 

...하지만 새 줄을 다른 줄에 추가하지 않고 $REMOTE 키워드 내가 도대체 ​​뭘 잘못하고있는 겁니까?

덕분에, 존

+0

코드/데이터 앞에 4 개의 공백을 붙입니다. [editing-help] (http://stackoverflow.com/editing-help)를보십시오. – Cyrus

답변

0

당신이 그것을보고 그렇게 할 때 변수를 확장하는 쉘을 요구하고 따옴표로 스크립트를 동봉하여 아마도 null 문자열입니다. 그래서 그냥하지 않습니다 당신이 사용하지 필요가없는

$ sed 's/\($REMOTE\)\"$/\1 -R 172.17.87.6"/' file 
SYSLOG_ARGS="$SYSLOG_ARGS -R $REMOTE -R 172.17.87.6" 

는 항상 변수가 확장하거나 다른 이유로 수 있도록 큰 따옴표를 필요가없는 하나의 스크립트 따옴표 문자열을 사용하고, 항상 따옴표 기간을 사용 단어 분리, globbing 확장 등을 가능하게합니다.

+1

감사합니다. – Eric

0

$ 정규식에서 특별한 의미를 가지고, 그것은 라인의 끝을 의미한다. 그것은에 $REMOTE을 확장

sed -i -e "/$REMOTE... 

: 당신은 그것을 탈출, 또는 사용 문자 클래스해야합니다

sed '/[$]REMOTE"/s/$/your replacement/' file 
+0

일반적으로 사실이지만 OP 코드가 실패하고 특정 코드가'$'를 벗어나지 않고 정상적으로 작동하는 것은 아닙니다. –

+0

예, 감사합니다. 이제 작동합니다. – Eric