• ベストアンサー

Linux環境 grepで改行コード(CRLF、LF)を検索できないで

Linux環境 grepで改行コード(CRLF、LF)を検索できないでしょうか? grep '\t\n' aaa.txtとしても、「\」はエスケープしてしまいます。 検索方法、grep以外でもご存知の方いらっしゃいましたらご教示いただけたら幸いです。

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

  • ベストアンサー
  • t-okura
  • ベストアンサー率75% (253/335)
回答No.6

GNU grep 2.5.4 だと、実験的なものだとかかれていますが -P オプションで perl の正規表現が使えます。 それを使えば grep -P '\r\n' aaa.txt で CRLF を持つ行を抽出できます。 他の方が書かれているように CR は \t ではなく、 \r です。

fushululu
質問者

お礼

返事が遅くなり大変申し訳ございません。 回答ありがとうございます。 全くもって勘違いしておりました。 もっと勉強します。 ありがとうございました。

すると、全ての回答が全文表示されます。

その他の回答 (5)

  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.5

なにか誤解しているようですが \tで表わされる「TAB」は、あくまで「TAB」です(ASCIIコード0x09) 改行コードでも「CR(0x0d)」でも「LF(0x0a)」でもありません。 「改行コードのタブ」などというものは、少なくとも私は知りません。 つまり、たとえ \t を展開するPerl等を使ったとしても、 \t\n は「TABの直後にLF」にヒットするだけで、CRLFにはヒットしません。 CRは \r です。

fushululu
質問者

お礼

遅くなりましてすみません。 全くもって勘違いしておりました。 ありがとうございました。

すると、全ての回答が全文表示されます。
  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.4

grepは行単位で処理を行うので、改行コードそのものを検索する方法はありません。 行末のパターンを検索する目的なら、行末にマッチする正規表現である$を使用します。 ただ、CRLFだと、CRが残ってしまうので、その点を考慮する必要はあります。 また、\+文字が特殊記号に展開されるかどうか、されるならどう展開されるかは、処理系によって違います。 grep自体には\t→tabのような展開機能はありません。 直接タブコードを入れる必要があります。 シェルのキーバインドによって、CTRL-Vの後にTABだったり、直接TABだったり、その他の方法だったりします grep '<ここにTAB>$' aaa.txt シェルの展開機能を使う方法もあります。 bashの場合、通常の"や'では展開されず、その前に$を付けることで展開されます。 grep $'\t$' aaa.txt zshでは"で展開できます。 grep "\t\$" aaa.txt 他のシェル等については、それぞれのマニュアルを参照ください。

すると、全ての回答が全文表示されます。
  • k_kota
  • ベストアンサー率19% (434/2186)
回答No.3

No.2です、私がバカでした。理解力が弱くてすみません。 行末については$を使えば良いみたいです。 また、タブについてはCtrl+vの後にtabを押せば大丈夫のようです。 grep " $" tmp.txt ("の後にC+vの後tabキー) で、行末にタブがある行を検索できました。 bashですがkshでも大丈夫だそうです。

すると、全ての回答が全文表示されます。
  • k_kota
  • ベストアンサー率19% (434/2186)
回答No.2

私がバカなのかも知れませんが、 grepというのは、検索したものが含まれている行を出力する機能です。 行というのはファイルの先頭か改行の部分の次の所から、 ファイルの終わりが次の改行までのことです。 なので、改行コードを検索するということは、最終行以外を出力するのとイコールです。 ちなみにviを使えば改行コードの可視化はできます。

fushululu
質問者

お礼

ご回答ありがとうございます。 試してみましたが、CRLFのタブはTabキーとはまた別物のようで、検索できませんでした。 grepでは改行コードを検索するのは不可能なのようですね。 perlを使うかcで作るしかないですかね。viやサクラエディタでは表示されますが。 質問の仕方がよくなかったのもありますが、 CRLFが含まれるファイルを調べたかったので、fileコマンドで解決できました。 すみません別の場所で頂いた回答で解決しました。 http://www.geocities.jp/geo_sunisland/character_code.html http://www.dolphin-bbs.net/linuxtips/crlf.html ありがとうございました。

すると、全ての回答が全文表示されます。
  • trapezium
  • ベストアンサー率62% (276/442)
回答No.1

行末に TAB がある行でいいなら awk '/\t$/{print}' aaa.txt grep だと \t は無視されるみたいね

fushululu
質問者

お礼

ご回答ありがとうございます。 awkでも改行コード(CRLF)のTABは検索できませんでした。 元々の目的がCRLFを含むファイルの検索でしたので、fileコマンドで解決することができました。 ありがとうございました。

すると、全ての回答が全文表示されます。

関連するQ&A