문자열 찾기 및 바꾸기에서 슬래시를 사용하여 sed로 찾기 및 바꾸기

문자열 찾기 및 바꾸기에서 슬래시를 사용하여 sed로 찾기 및 바꾸기

with 명령을 /var/www사용하여 파일을 변경 하고 싶습니다/home/lokesh/wwwsed

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)에서 작동합니다.

관련 정보