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

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

次のような HTML マーカーを含む Markdown README ファイルがあります。

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

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

私は改行を 0xFF に置き換えようとしていましたが、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: 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

関連情報