質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
bash

bash(Bourne-again-Shell)は sh(Bourne Shell)のインプリメンテーションに様々な機能が追加されたシェルです。LinuxやMac OS XではBashはデフォルトで導入されています。

sed

sedとは、POSIX環境のために作られたコマンドラインエディタです。sedは編集スクリプトの指示のもとに複数のファイルを編集し、標準出力にその結果を出力します。

UNIX

UNIXとは、AT&Tのベル研究所で開発されたコンピューター用のマルチユーザー・マルチタスクのオペレーションシステム(OS)です。政府や教育機関や研究所で広範囲に採用されています。

Q&A

解決済

3回答

16893閲覧

sedコマンドで置き換えしようとするとファイルが空になってしまいます

hoosts

総合スコア15

bash

bash(Bourne-again-Shell)は sh(Bourne Shell)のインプリメンテーションに様々な機能が追加されたシェルです。LinuxやMac OS XではBashはデフォルトで導入されています。

sed

sedとは、POSIX環境のために作られたコマンドラインエディタです。sedは編集スクリプトの指示のもとに複数のファイルを編集し、標準出力にその結果を出力します。

UNIX

UNIXとは、AT&Tのベル研究所で開発されたコンピューター用のマルチユーザー・マルチタスクのオペレーションシステム(OS)です。政府や教育機関や研究所で広範囲に採用されています。

0グッド

1クリップ

投稿2014/09/15 17:45

コマンドラインを使ってhtmlファイルにfind and replaceを実行しようと思います。

コマンドは以下のようになっています。

lang

1sed -e s/henkan_mae/henkan_ato/g index.html > index.html

しかし、これを使った後にファイルを見てみると空になっています。(つまりファイル内のコンテンツを全て削除してしまいます)

ファイルを復元した後に以下を使ってみたのですが置き換えまではできているようです。

lang

1sed -e s/henkan_mae/henkan_ato/g index.html

どこか間違えているのでしょうか?

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

記載されているshellのコマンドを見ましたが

index.htmlの部分で、

書くためのindex.htmlファイルを開いて以前のコンテンツの中身を全て削除してしまいます。

直すにはsedに-iオプションをパスし、変更をインラインで行う必要があります。また、置き換えを行う前にオリジナルのバックアップもとることを忘れないでください。

lang

1sed -i.bak s/henkan_mae/henkan_ato/g index.html

このコマンドは、.bakが無ければMac OSXなどのプラットフォームで機能しなかったと思います。

投稿2014/09/17 07:30

iken

総合スコア47

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

リダイレクトで入力フィアルと出力ファイルを同じにすると、そのファイルは空になってしまいます。
この操作をしてファイルを内容を失ってしまい うろたえることが 慣れないうちは よくあります。
一般的には リダイレクトで 入力と出力に同じファイルを指定しないようにしたほうが良いです。

例:
cat -n は ファイル内容を行番号付きにすることができます。

$ cat data.txt A B C $ cat -n data.txt 1 A 2 B 3 C

data.txt を行番号付きに変換するつもりで次のようにすると、data.txt は空になってしまいます。

$ cat -n data.txt > data.txt $ cat data.txt $ # 何も表示されない。data.txt はサイズ 0 の空になってしまっている。

"> data.txt" と書いているので、まずは data.txt が新規作成されてしまうからです。
その後に cat -n data.txt を実行しても すでに data.txt は空なので、実行結果は 空になってしまうのです。

既にある別の回答では、sed の -i オプションでファイル内容が消える事を避けることが可能な事が示されていますが、一般的には リダイレクトで 入力と出力に同じファイルを指定しないようにしたほうが良いです。
ファイルに行番号をつけたものに変換をしたいなら、

$ cat -n data.txt > work.txt 上のコマンドの実行でエラーが発生していない事を確認してから、 $ mv work.txt data.txt

のようにすれば、data.txt を行番号付きのものに変換することが可能です。

投稿2014/09/17 14:37

katoy

総合スコア22324

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hoosts

2014/09/19 07:38

詳しく教えて頂き、回答ありがとうございました!!
guest

0

間違って回答を投稿するボタンを2回押してしまったようで、2重回答になったので、一方をこの文章に変更しました。

投稿2014/09/17 14:32

katoy

総合スコア22324

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問