sedを使用して改行文字を含むコンテンツを置き換える

sedを使用して改行文字を含むコンテンツを置き換える

次のhtmlタグを持つmarkdown READMEファイルがあります。

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

内部テキスト(すでに何かある可能性があります)をhtmlタグと改行(セルにhtmlがあるマークダウンテーブル)を持つファイルの新しいコンテンツに置き換えたいと思います。

sed の改行文字を 0xFF に置き換えて、次のコードを使用してもう一度置き換えようとします。

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'

しかし、これはうまくいきません。タグ内のテキストを貢献者のコンテンツに変換するにはどうすればよいですか?

使用時に動作しますtr '\n' '\xFF'が、改行文字をx

この記事を見つけました。Sed:2つのパターン間の複数行の交換以下を試してください。

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の置き換え中に新しい行を笑うUnicode文字に変換するためにこのハッキングを使用しました。

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

関連情報