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 }}
参考
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を抽出する