내 프로젝트 .sh
파일에 다음 명령을 작성했습니다.
var1=`sed -e ':a' -e 'N' -e '$!ba' -e 's/\n/\\n/g;s/^/"/g;s/$/"/g' ${var}`
sed -i "s/%PQR%/$var1/g" file2
var
업데이트하려는 파일의 위치를 저장하는 변수입니다 . 파일의 시작과 끝 부분에 큰따옴표를 추가하고 싶습니다. 또한 모든 새 줄을 \n
.
To err is to human.
This is life.
산출:
"To err is to human.\nThis is life."
그런 다음 %PQR%
in file2
을 var1
.
그러나 파이프라인을 실행할 때 제목에 명시된 대로 두 번째 명령에 오류가 발생합니다.
sed: -e expression#1 char 48: unterminated `s' command
답변1
파일 내용을 json 문자열로 인코딩하려면 다음을 사용하세요.
json=$(jq --slurp -R < "$file")
또는:
json=$(jq --slurp -R 'rtrimstr("\n")' < "$file")
마지막 줄을 구분하는 개행 문자를 자릅니다.
그리고 특정 자리 표시자를 임의의 데이터로 바꾸는 것이 훨씬 사용하기 쉽습니다 perl
( -i
일부 sed
구현에서 지원되는 옵션은 실제로 영감을 받았습니다 perl
).
PLACEHOLDER='%PQR%' REPLACEMENT="$json" perl -pi -e '
s/\Q$ENV{PLACEHOLDER}\E/$ENV{REPLACEMENT}/g' -- "$other_file"
sed
그러나 가능합니다일부 문자를 이스케이프 처리해야 합니다..