3

端末で sed を使用して検索と置換を実行しようとしています。

Apache構成ファイル内で、次のものを置き換えようとしています:

DocumentRoot /var/www

DocumentRoot /var/www/mysite.com/public_html

エディターを使用せずに、コマンド ラインから。私はsedでこれをやりたいのですが、次のさまざまな反復を試しました:

sudo sed -i 's/'DocumentRoot /var/www'/'DocumentRoot /var/www/mysite.com/public_html'/' /etc/apache2/sites-available/mysite.com

ただし、そうすると、次のエラーが発生します。 sed: -e expression #1, char 14: unterminated s command

そのため、パスのスラッシュでエラーが発生しています。どうすればこれを回避できますか?

ご協力いただきありがとうございます

4

2 に答える 2

9

/正規表現区切り文字として使用する必要はありません。正規表現に、そうでなければエスケープする必要があるものが含まれている場合は、 #orを使用できます。@/

sed -i s#expr1#expr2#

したがって、次のようになります。

sudo sed -i 's#DocumentRoot /var/www#DocumentRoot /var/www/mysite.com/public_html#' /etc/apache2/sites-available/mysite.com

また、substitution-argument 自体にスペースが含まれているため、シングル クォーテーションで囲む必要があります。

于 2013-04-22T04:11:04.577 に答える
4

/でセパレーターとして使用することは必須ではありませんsedsed 's/hi/hey/と同じですsed 's#hi#hey#'

于 2013-04-22T04:13:18.247 に答える