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

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

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

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

sh

shは、UNIX系OSのシェル操作の1つであり、最も基本的なシェルのことです。

Q&A

解決済

3回答

8654閲覧

ファイルの改行のみの行を削除したい

Naggy

総合スコア32

bash

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

sh

shは、UNIX系OSのシェル操作の1つであり、最も基本的なシェルのことです。

0グッド

0クリップ

投稿2016/09/06 22:15

###質問内容
ファイルの改行のみの行を削除したいのですが、
sed '/^$/d' file
で実行してもその行が削除されません。
調べても原因が一向に分からないので、どんな要因が考えられるか教えていただけると幸いです。

###使用している環境

GNU bash, version 3.2.57(1)-release (x86_64-apple-darwin15)
Copyright (C) 2007 Free Software Foundation, Inc.

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

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

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

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

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

guest

回答3

0

おそらく改行がCRLFになっているのではないでしょうか?LinuxであればLFにすれば、うまく行きます。

file hogefile

hogefile: ASCII text, with CRLF line terminators

これで行けませんでしょうか?
sed '/^\r$/d' file

投稿2016/09/06 22:32

編集2016/09/06 22:42
A.Ichi

総合スコア4070

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

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

Naggy

2016/09/06 22:58

file hogefile を利用したらASCIIファイルの場合はsed '/^\n$/d' fileでうまく作動しました!ありがとうございます。 しかし、htmlドキュメントの場合、sed '/^\n$/d' file sed '/^\r$/d' file sed '/^\r\n$/d' file のいずれもうまくいきませんでした。 このようなファイル形式ごとにどんな改行コードが作動するか一瞥してわかるとありがたいのですが難しいですね。。 また、ファイル形式ごとの改行コードだけを調べるコマンドなどがあれば教えていただけると嬉しいです。
otn

2016/09/06 23:16

> sed '/^\n$/d' file sed '/^\r$/d' file sed '/^\r\n$/d' file これは間違いです。 sed '/^$/d' file sed '/^\r$/d' file だけ試してください。
A.Ichi

2016/09/06 23:24

そうですか、htmlドキュメントでもCRLF/LF/CRのパターンになると思っておりました、すみませんが分かりません。<br>が改行位しか知りません、ブラウザ上の話ですが。 nkfでも-g fileで改行コードは分かります。改行専用コマンドは分かりません。
ynakano

2016/09/06 23:38

ファイルそのものの改行はざっくり言うと以下の2種類です。 Windows CR+LF Unix/Linux LF HTMLの<br>というのは、ブラウザに対して「改行して表示しなさい」という指示なので、この質問でいうところの「改行」とは別物です。 HTMLドキュメントファイルの(<br>ではない)改行が上記どちらになるかは、WebサーバのOSによって決まると理解してもらっていいと思います。 レンタルサーバだと「改行コードは○○」なんて指示があったりします。
A.Ichi

2016/09/06 23:49

仮にhtmlドキュメントがmacファイル(CR)だとしたら、一端LFにして戻す手も有ります。 nkf -Lu hoge | sed '/^$/d' | nkf -Lm >hoge2
guest

0

$ cat 1.txt | grep -v "^[ | ]*$"

[ | ]は [全角スペース|半角スペース] と記載しています。
空白文字だけの行または空行 でないものを取り出しています。

linux 空行 削除
で、 google 検索すると情報を得られます。

例:

投稿2016/09/10 00:27

katoy

総合スコア22324

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

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

0

ベストアンサー

しかし、htmlドキュメントの場合、sed '/^\n$/d' file sed '/^\r$/d' file sed '/^\r\n$/d' file

のいずれもうまくいきませんでした。

$が行末(\nの直前)を意味しますので、行末の前に\nが来ることは有りえません。
なので、コメントに書いた通り、
sed '/^$/d' file sed '/^\r$/d' file
で、\nの場合と\r\nの場合に対応します。あるいは、正規表現の\?を使って、
sed '/^\r\?$/d' file
で、両方に対応します。

これらで駄目なケースというのは、その行が空行では無いからではないでしょうか?空白やタブが入っているとか。

投稿2016/09/07 00:03

otn

総合スコア84557

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

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

Naggy

2016/09/07 03:32

みなさん、お手数をおかけしました。。。 改行だけだと思っていたら全角スペースが入っていたようです。 タブなどだけの行を除外して改行のみの行だけしか残っていないと考えていたのですが、私のミスです。 申し訳ない。。。 稚拙な質問にご回答いただきありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問