shellでファイルの先頭に例えば下記のような文字列(改行入り)を挿入したいです。
環境はMac & zshです。
Title message : hogehoge
sed等で簡単にできるかなと思ったのですが意外と手こずり、結局以下のような感じになってます(´・ω・`)
もっとスマートな方法があると思うのですが、シェル力がなさ過ぎてこれが限界でした。
# sample.txtというファイルの先頭に文字列を追加したい場合 # 元のファイルを複製 cp -r sample.txt sample.txt.old # 追加したい文字列をファイルに出力 echo -e "Title\\n\\nmessage : hogehoge\\n" > add.txt # ファイルをくっつけて元のファイルを更新 cat add.txt sample.txt.old > sample.txt # いらんファイル消す rm -rf add.txt sample.txt.old
もっといい方法をご存知の方、どうぞご教授お願いしますm(_ _)m
[追記]
最初sedでやろうとしたときはこんな感じでやりました。
(MacのsedはBSD系ということで-iの後ろの引数にバックアップファイルの拡張子を入れないといけないのですが、バックアップファイルはいらないので""にしてます。)
$ sed -i "" "1iTitle\n\nmessage : hogehoge\n" sample.txt sed: 1: "1iTitle\n\nmessage : ho ...": command i expects \ followed by text
そしたらこんなエラーになってしまい、よくわからなかったので上記の回避策になった次第です。
[追記2]
Mac(BSD)のsedのiコマンドで改行をうまく扱えないのはバグのようでした。2005年のバグが2009年時点でも未解決とコメントされていますが、現在でも未解決のようですね。
http://www.linuxquestions.org/questions/programming-9/sed-error-command-c-expects-%5C-followed-by-text-under-os-x-but-works-in-linux-730997/
[追記3]
多くの皆様に回答していただき、大変感謝です!
どの回答も素晴らしく大変勉強になりました。
ベストアンサーを選ぶのが苦しかったのですが、shの範囲内でシンプルな書き方のできるedコマンドとsedのsコマンドの回答をベストアンサーにさせていただきました。
個人的にはngyukiさんのsedを使わない別解が好きです^^
実際の現場ではperlの回答を採用することになりそうですw

回答8件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2015/07/18 13:50
2015/07/19 07:32