-PR-
解決済み

シェルで文字列を含んだ行だけを削除したい!

  • すぐに回答を!
  • 質問No.856150
  • 閲覧数1831
  • ありがとう数2
  • 気になる数0
  • 回答数2
  • コメント数0

お礼率 49% (224/453)

文字列を含んだ行だけを削除したいと思って、

sed -e "/XXXXXXXX/d" destfile > destfile

または

grep -v XXXXXXXX destfile > destfile

とやったら、全部消えてしまいました!(^^;)

どうしてですか?

そして、どうしたら正しい処理になりますか?

すみません。シェル初心者です。
易しく、わかりやすく、教えて下さい!
通報する
  • 回答数2
  • 気になる
    質問をブックマークします。
    マイページでまとめて確認できます。

質問者が選んだベストアンサー

  • 回答No.1
レベル13

ベストアンサー率 24% (357/1463)

sed や grep に限りませんが、
入力ファイルと出力ファイルが同じというのはいけません。
出力ファイルを開いた時点でそのファイルの内容は消えます。
それを読み込んで処理しようとしているのですから、
うまくいかないのは当然です。

sed -e "/XXXXXXXX/d" destfile > tmpfile
mv tmpfile destfile

のようにすればできると思います。
お礼コメント
goonejp

お礼率 49% (224/453)

そうですね!
ファイルを二つに分けるといいのがわかりました!

あと、tmpfileを消すコマンドも含めて、三つをコピペで、とりあえず、やって見ます!

その消すコマンドも、調べなくちゃわからないのですが…。(^^;)

ありがとう御座います!
投稿日時 - 2004-05-12 17:58:58

その他の回答 (全1件)

  • 回答No.2
レベル14

ベストアンサー率 41% (2512/6032)

>sed -e "/XXXXXXXX/d" destfile > destfile
>または
>grep -v XXXXXXXX destfile > destfile
>とやったら、全部消えてしまいました!(^^;)
>どうしてですか?

シェルで
ほげほげ > destfile
と打つと「ほげほげ」の部分が何であっても、まず最初に destfile が「新規作成」されます。そして、その後に「ほげほげ」を実行しようとします。

cat destfile > destfile
この例では、まず、destfile が新規作成(元の内容はすべて捨てられる)され、次に、cat が起動され、cat は新規作成されて中身の無い destfile を読み込みますが中身が無い為にすぐに終了し、最後に destfile がクローズされます。

つまり、destfile の中身は全部消えてしまいます。

>そして、どうしたら正しい処理になりますか?
>すみません。シェル初心者です。
>易しく、わかりやすく、教えて下さい!

まずは、リダイレクトとパイプについての動作原理(誰がファイルを開き、誰がファイルを作成し、誰がファイルをクローズしているのか)を理解する必要があります。

その先(どうしたら正しい処理になるか)に進むのは、質問者さんには早過ぎます(笑)
お礼コメント
goonejp

お礼率 49% (224/453)

わかりやすい説明で、本当に勉強なりました。

ひょっとしたら「ギャル文字」で説明してくれる女の子もいるかも知れない!と思いながら質問した(^^;)のですが、まだまだ、わからないことが多い割りに、今後、使えると便利な機会も増えそうなので、また、機会がありましたら、是非、よろしくお願い致します。
投稿日時 - 2004-05-12 18:08:37
このQ&Aで解決しましたか?
関連するQ&A
こんな書き方もあるよ!この情報は知ってる?あなたの知識を教えて!
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する
-PR-
-PR-

特集


開業・独立という夢を持つ人へ向けた情報満載!

ピックアップ

ページ先頭へ