sed는 유닉스 경로를 다른 유닉스 경로를 포함하는 변수로 대체합니다.

sed는 유닉스 경로를 다른 유닉스 경로를 포함하는 변수로 대체합니다.

sed를 통한 Unix 경로를 bash 스크립트의 다른 unix 경로가 포함된 변수로 바꿔야 합니다.

예:

another_unix_path=/another/unix/path
sed -i 's/ \/some\/path\/file.txt/ '$another_unix_path'/g' some_file.txt

답변1

특수 문자를 이스케이프 처리해야 합니다.

another_unix_path="\/another\/unix\/path"
echo /some/path/file.txt | sed -e 's/\/some\/path\/file.txt/'$another_unix_path'/g'

다음 결과가 출력됩니다.

/다른/유닉스/경로

답변2

특수 문자를 이스케이프하는 /것은 옵션입니다.

예를 들어 다음을 사용하여 기본 sed구분 기호( ) 를 변경할 수도 있습니다 ./?

another_unix_path="/another/unix/path"
echo /some/path/file.txt | sed -e 's?/some/path/file.txt?'$another_unix_path'?g'

플래그 바로 뒤에 사용되는 문자는 s어떤 구분 기호가 사용될지 정의합니다.s?

편집하다 :

#!/bin/sh
basepath=/another/unix/path
baseurl=/base/url
sed -i 's?# set $IMAGE_ROOT /var/www/magento2;? set $IMAGE_ROOT '$basepath$baseurl';?g' somefile.txt

답변3

구분 기호로 사용하는 경우 경로의 /모든 항목을 이스케이프 처리해야 합니다 . 예/sed 's/\/some\/path/'$replacement'/g'

다행스럽게도 Perl과 마찬가지로 sed에서는 많은 문자를 구분 기호로 사용할 수 있으므로 쓸 수도 있습니다 sed 's#/some/path#'$replacement'#g'( g플래그는 한 줄에 여러 항목을 대체하는 데 사용됩니다).

또한 sed는 파일에서 실행하는 경우 내부 교체를 허용하지 않습니다. 즉, 임시 파일에 쓰고 옮겨야 합니다. 업데이트:사실, Gnu의 sed하다Perl처럼 작동하는 내부 옵션이 있거나 -i백업 확장이 -i.ext어디에 있습니까? .ext그러나 이식성을 위해서는 Perl이 더 바람직할 수 있습니다.

내부 교체를 위해 다음과 같이 Perl을 사용할 수 있습니다.

# In-place without backup:
perl -pi -e 's#/some/path#'$replacement'#g' <file>

# In-place with backup as .orig (note .orig is glued to the -i switch):
perl -pi.orig -e 's#/some/path#'$replacement'#g' <file>

두 번째 명령을 두 번 입력하면 첫 번째 백업을 덮어쓰게 되므로 주의하세요!

관련 정보