0

以下を含むファイル内のすべての行を置き換えようとしています。

/var/www/webxyz/html

/home/webxyz/public_html

文字列: webxyzは変数です: web1、web232 のように

したがって、 webxyzの前後の文字列のみを置き換える必要があります。解決策なしでこれを試しました:

sed -i 's/"var/www/web*/html"/"home/web*/public_html"/g'

また、ファイル (サブディレクトリとファイルを含む) をチェックして置き換える必要があります。* 演算子は機能しません。

4

2 に答える 2

3

正規表現内では、それらを囲む区切り文字をエスケープする必要があります。この場合は/. ただし、次のような別の区切り文字を使用することもできます,

sed -i 's,"var/www/web*/html","home/web*/public_html",g'

ただし、意図したとおりに機能させるには、を削除して(sed はワイルドカードのグロビングを認識しません) を次のように"置き換える必要もあります。b*

sed -i 's,var/www/web\([^/]*\)/html,home/web\1/public_html,g'

hereは、 a 以外の\([^/]*\)後のすべてに一致するために使用されます。一致する文字列は、置換部分で参照されます。web/\1

于 2013-08-10T15:14:53.390 に答える
1

置換操作は次のようになります (詳細については、 sedを参照してください)。

sed -i 's/var\/www\(\/.*\/\)html/home\1public_html/g'

\(...\)はグループ化であり、置換側に として表示される「一致変数」を指定することに注意してください\1.*「任意の 1 文字 (ドット) に 0 回以上一致する (星)」という にも注意してください。さらに、制御構造/の一部として扱われないように、文字をエスケープする必要があることに注意してください。sed

于 2013-08-10T15:06:58.743 に答える