sed를 사용하여 bash 스크립트를 통해 일부 줄을 추가하고 싶습니다. 스크립트는 작동하지만 출력이 잘못되었습니다.
LINEB="word"
sed '/g id=\"..\"/a style=\"fill:$LINEB;\"' file.txt > foo.txt
내가 <g id="ai" style="fill:$LINEB;">
대신 받음<g id="ai" style="fill:word;">
다양한 괄호를 사용하더라도.
답변1
작은따옴표 안에 변수를 포함할 수 없습니다. 당신은 할 수 있습니다:
전체 sed 스크립트 주위에 큰따옴표를 사용하고 그 안에 있는 큰따옴표를 백슬래시로 이스케이프 처리하세요.
작은따옴표로 묶인 문자열을 큰따옴표로 묶은 변수로 끝내고
'
작은따옴표로 묶인 문자열을 다시 시작하세요.
LINEB="word"
sed '/g id=\"..\"/a style=\"fill:'"$LINEB"';\"' file.txt > foo.txt
답변2
$LINEB
먼저, pend 명령을 올바르게 준비하도록 주의를 기울여야 합니다 sed
a
.
sed '/<\([^"<>]*\("[^"]*"\)* \)*g id="[^"][^"]"/a\'"$(echo;#"'
printf 'style="fill:"%s"\n' "$LINEB" |
sed 'H;1h;$!d;s/\\/&&/g;s/\n/\\&/g')
" <infile >outfile
또한 다른 파일에서 추가 텍스트를 찾는 것이 a
더 쉬울 수도 있습니다 . 그런 다음 r
적절한 경우 읽을 수 있습니다.
printf 'style="fill:%s"\n' "$LINEB" >/tmp/LINEB
sed '/<\([^"<>]*\("[^"]*"\)* \)*g id="[^"][^"]"/r /tmp/LINEB' <infile >outfile
rm /tmp/LINEB
이스케이프가 필요하지 않습니다.