Octpressで各ブログ記事に利用していた<!--more-->
を一括置換するときに、ハマった話。
以下のように、<!--more-->
を置換しようとしたのが、
-
!
のエスケープ - 改行コードの出力
でハマった。
置換前
<!--more-->
置換後
<!--more-->
{% include hogehoge.html %}
!
のエスケープ
まず、!
は過去の実行コマンドを参照するコマンドのため、置換文字列に含まれると意図しない動きをしてしまう。
⇛ \!
とエスケープすることで解決
改行コードの出力
Macのsedコマンドでは、例えば、以下のように\n
を改行コードに置換しようと思っても、全然意図する動きにならない。
echo "hogehoge\nfoo\nbar" | sed 's/\\n/\n/g'
正しく置換させるためには、以下のようにする必要があるとのこと。
LF=$'\\\x0A'
echo "hogehoge\nfoo\nbar" | sed 's/\\n/'"$LF"'/g'
CR LF CR+LFの違い
改行コードの復習も兼ねて調べておく
キャリッジリターン(Carriage Return 復帰 : CR(0x0d))
- 行頭へ印字ヘッドあるいはカーソルを移動すること。
OS9までのMacOSは、CRを改行コードと解釈していた(裏取りなし)
ラインフィード(Line Feed 改行 LF(0x0a))
- 次の行へ一行移動する。
UNIX環境は、LFを改行コードと解釈する
(OSXも同様)
CRLF 0x0d0a
Windows環境は、CR LFを改行コードとして解釈する
実行したかったコマンド
markdownファイルの中の、<!--more-->
タグを置換する
find . -name "*.markdown" | xargs sed -i '' 's/<\!--more-->/<\!--more-->'"$LF"'{% include ga.html %}/g'
参考
図解DTP用語辞典
改行コードの違い 日本語組版でいう改行は、行を改めて次の行の初めから文字を組み始めることである。しかし欧文組版では、タイプライターの操作メカニズムの制約から日本語の改行に当たる操作は2段階に分かれ、 ...
改行コードの違いを体感してみる - ザリガニが見ていた...。
メモ
find _posts/ -name "*.markdown" | xargs grep "ga.html"
_posts//2014-09-28-baseball-club-yokyo.markdown:{% include ga.html %}
_posts//2014-10-30-how-google-works.markdown:{% include ga.html%}
_posts//2014-11-16-fountain-pen-cleaning.markdown:{% include ga.html %}
_posts//2014-11-21-ted-api.markdown:{% include ga.html %}