次の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