2017-09-21 15 views
0

/etc/init.d/syslogファイル(組み込みシステムのビジーボックスタイプ)を編集したいとします。SED:1行にマッチして末尾に追加する

文字列$REMOTE"(二重引用符を含む)を含む1行を見つけて、この行に文字列を追加する必要があります。私が試してみました

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つの空白を付けます。 [edit-help](http://stackoverflow.com/editing-help)を見てください。 – Cyrus

答えて

0

二重引用符でスクリプトを囲むことにより、あなたはそれを見ているときに変数を展開するシェルを求めている:

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

それは$REMOTEへの拡大します、おそらくヌル文字列です。だからそれをしない:

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

は常にあなたは変数が展開または他の何らかの理由のためにできるように二重引用符を必要でない限り、スクリプトや文字列の周りの単一引用符を使用し、常にあなたが使用しないする必要がある場合を除き、引用符の使用期間単語の分割、グロビング展開などを許可します。

+1

ありがとう、完璧! – Eric

0

$正規表現で特別な意味を持っているが、それはラインの終わりを意味しています。あなたはそれをエスケープするか、文字クラスを使用する必要があります

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

一般的に真実ですが、それはOPコードが失敗しているわけではなく、あなたの特定のコードは '$'をエスケープしないでうまく動作します。 –

+0

はい、ありがとうございます。それは今働く。 – Eric

関連する問題