LoginSignup
21
21

More than 5 years have passed since last update.

Macのsedで改行コードを出力させる 〜改行コードの違い再確認〜

Posted at

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'

参考

sedで改行を出力する - rcmdnk’s blog

図解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 %}

21
21
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
21
21