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
#
반드시 하나 일 필요는 없으며 단일 문자일 수 있습니다. 예를 들어 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)에서 작동합니다.