4つの文を含むテキストファイルがあり、 "me"で終わる文をgrepしたいのですが、grep "me$"を実行すると機能しません。
私は何を逃したことがありませんか?
(結果が1、2、4行になりたいです。)
編集:画像をテキストに置き換えます。
$ cat sm.txt
somebody once told me
somebodyoncetoldme
the world was
gonna roll me
$ grep "me$" sm.txt
$
答え1
コメントからfile
テキストファイルをCRLF行末のあるASCIIテキストファイルとして識別すると述べました。これは、Windowsシステムでエディタを使用して作成されたDOSテキストファイルであることを別の方法で表現したものです。
Unix テキストファイルと比較して、DOS テキストファイルには、改行文字の前の各行末に追加のキャリッジリターン文字があります。そのため、正規表現が一致せず、実際に終わる行がなく、でme
終わります。me\r
これは\r
キャリッジリターンを作成する一般的な方法です。
回避策は、dos2unix
Unixシステムで使用する前に、変換ツールを使用してテキストファイルをUnixテキストファイルに変換することです。
答え2
それ自体はgrep "me$"
絶対に正確です。あなたの行がタブやスペースなどの見にくい追加の文字で終わるようです。
次のいずれかを試してください。
# \t means tab
# [\t ] means a tab or a space
# [\t ]* means any number (including zero) of tabs and spaces.
#
grep "me[\t ]*$" sm.txt
または:
# [[:space:]] means any white space. I don't know if there are
# more than just space and tabs. This works with GNU grep only.
#
grep "me[[:space:]]*$" sm.txt