withコマンドを/var/www
使用してファイルを変更したい/home/lokesh/www
sed
sed -i 's///var//www///home//lokesh//www/g' lks.php
しかし、これはエラーを提供します
sed: couldn't open file ww///home//lokesh//www/g: No such file or directory
答え1
知っているかどうかはわかりませんが、aを区切り文字としてsed
使用する必要がない優れた機能があります。/
したがって、あなたの例は次のように書くことができます。
sed -i 's#/var/www#/home/lokesh/www#g' lks.php
#
必ずしも1つである必要はなく、1文字でも構いません。たとえば、3
区切り文字として使用する場合は、次のようになります。
echo "foo" | sed 's3foo3bar3g'
bar
答え2
他の人が指摘したように、次のように他の文字を区切り文字として使用できます。
sed -i 's!pattern!replacement!g' /path/to/file
/
ただし、区切り文字を置き換える便利な文字がない場合は、pattern
各文字の前にバックスラッシュを追加して合計に含まれる区切り文字をエスケープすることもできます。以下は、区切り文字を次に置き換えた例です。replacement
\
/
/some/path
../some/replacement
sed -i 's/\/some\/path/..\/some\/replacement/g'
しかし、人間が読みにくくなるため、通常、次のように可能な場合は、異なる文字を区切り文字として使用することをお勧めします。
sed -i 's!/some/path!../some/replacement!g'
答え3
次のようなものを試しましたか?
sed -i 's@/var/www@/home/lokesh/www@g' lks.php
答え4
bashスクリプトでsedコマンドの前に単純なprematコマンドを入力すると、パス変数のスラッシュが隠されます。交換するパス変数が$ P0にあるとします。
P0="/foo/foo/foo/file";
P0=(${P0////\\/}); #masked Slash to form: \/foo\/foo\/foo\/file
次のように交換する必要があります。
P1="/whatever/youwant/file";
P1=(${P1////\\/}); #masked slash to form \/whatever\/youwant\/file
その後、単にsedを使用してください。
sed -i "s/${P0}/${P1}/" /wherever/that/should/go/file;
これはbash --version 5.1.4(1)で動作します。