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

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

更新日:2019.05.01 作成日:2014.11.25

Octpressで各ブログ記事に利用していた`

`を一括置換するときに、ハマった話。

以下のように、<!--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//’"$LF"’{{% googleadsense %}}/g | safeHTML }}

参考

B! Pocket

Related contents

TECH

2014.12.13

Jekyllのタグとカテゴリを整理するために、一覧表示するWebアプリ(個人用)をつくった

TECH

2014.12.02

Jekyllに月別アーカイブを実装する

TECH

2014.12.01

Jekyllにタグクラウドを実装する

TECH

2014.11.29

UTF-8-MACとは何か?〜Jekyllのカテゴリ(タグ)ページで濁点を含むページが表示されない〜

TECH

2014.10.29

JekyllでPygmentsを使ってのシンタックスハイライト

TECH

2014.10.21

Jekyllでページ分割する -pagenation-

TECH

2014.09.03

YouTube埋め込みタグをレスポンシブ化する

TECH

2014.06.24

JekyllのFront matterを抽出する