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>
두 번째 명령을 두 번 입력하면 첫 번째 백업을 덮어쓰게 되므로 주의하세요!