特定の式で終わる行を見つける方法

特定の式で終わる行を見つける方法

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キャリッジリターンを作成する一般的な方法です。

回避策は、dos2unixUnixシステムで使用する前に、変換ツールを使用してテキストファイルを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

関連情報