sed를 사용하여 개행 문자가 있는 콘텐츠 교체

sed를 사용하여 개행 문자가 있는 콘텐츠 교체

다음과 같은 HTML 마커가 있는 마크다운 README 파일이 있습니다.

<!-- CONTRIBUTORS-START -->
<!-- CONTRIBUTORS-END -->

그리고 내부의 텍스트(이미 있을 수 있음)를 html 태그와 개행 문자가 있는 파일의 새 콘텐츠(셀에 html이 있는 마크다운 테이블)로 바꾸고 싶습니다.

나는 개행 문자를 0xFF do sed로 대체하려고 시도한 후 다음 코드를 사용하여 다시 대체했습니다.

CONTRIBUTORS=`./contributors -u jcubic -r jquery.terminal -m | tr '\n' $'\xFF'`
# contributors script get data from github and display markdown table
# or ERROR if rate limit reached

echo "$CONTRIBUTORS" | grep ERROR > /dev/null || cat README.in | tr '\n' $'\xFF' | \
    sed -e "s%\(<!-- CONTRIBUTORS-START -->\).*\(<!-- CONTRIBUTORS-END -->\)%\1\n${CONTRIBUTORS}\2%" #| tr $'\xFF' '\n'

하지만 작동하지 않습니다. 마커 내부의 텍스트를 CONTRIBUTORS 콘텐츠로 바꾸려면 어떻게 해야 합니까?

내가 사용할 때 작동했지만 tr '\n' '\xFF'개행 문자를 x.

이 글을 찾았어요Sed: 두 패턴 사이의 여러 줄 교체다음을 사용하여 시도해 보세요.

sed -n "/CONTRIBUTORS-START/{p;:a;N;/CONTRIBUTORS-END/!ba;s%.*\n%${CONTRIBUTORS}\n%};p"

(s 명령에서 /를 %로 바꾸었지만 오류가 발생했습니다.

sed: -e expression #1, char 1630: unterminated `s' command

답변1

"☺"나는 이 해킹을 사용했습니다. 개행이 문제를 일으키기 때문에 sed 교체를 수행하는 동안 새 줄을 스마일리 유니코드 문자로 변환했습니다 .

CONTRIBUTORS=`./contributors -u jcubic -r jquery.terminal -m $@  | tr '\n' '☺'`

if echo "$CONTRIBUTORS" | grep ERROR > /dev/null; then
    echo "$CONTRIBUTORS" | tr '☺' '\n'
else
    cat README.in | sed -n "/CONTRIBUTORS-START/{p;:a;N;/CONTRIBUTORS-END/!ba;s%.*\n%${CONTRIBUTORS}%};p" | tr '☺' '\n' > README.tmp
    cp README.tmp README.in
    rm README.tmp
fi

관련 정보