Ubuntuで「1」で始まるgrep行


47

「1」で始まる行を検索しようとしました

ls -1 | grep ^1*

しかし、1で始まらない行を返します。ここで何が欠けていますか?


ちょうど別のノート:あなたがリミットにgrepを使用したい場合はls、出力ファイル名はいくつかの奇妙な文字が含まれている場合、あなたがそのような改行として、問題に実行されます...他の多くのコマンドを(何とかないls、少なくともない私がチェックする必要があり、そのバージョン)ヌルを与えるためのオプションは、あなたが安全に処理することができ、出力を分離し、持っているgrep -z
ゲルトバンデンベルグ

ありがとう、@ GertvandenBerg!改行などの奇妙な文字がgrepを引き起こす可能性がある問題は何ですか?ヌルで区切られた出力を与えるコマンド
ティム

1
-print0で検索すると、他のほとんどのGNUツールには-0または-zオプションがあります。(ソート、xargsなど)。ファイル名に改行が含まれる場合、2行が改行を含むファイル名であるか、2つの別個のファイル名であるかを知ることは不可能です。
ゲルトファンデンバーグ

回答:


68

あなたの正規表現は、あなたがそれが何をすると思うかを意味しません。0回以上(*)回繰り返される1回の(^)で始まるすべての行に一致します。すべての文字列がその正規表現に一致します。grep '^1'あなたがしたいことをします。


33

以下を試しましたか?

 ls -1 | grep "^1"

つまり、を削除します*。これはgrep、基本的にを伝え、^1式のゼロ個以上の出現を見つけます。つまり、1で始まる行に一致するかどうか。


13

これはあなたの質問には答えませんが、これはあなたの目標と思われるものに対するより良い解決策です。

ls -ld 1*

シェルグロブを使用して、で始まるすべてのファイルをリストできます1*シェルグロビングでは、が正規表現とは異なる意味を持つことに注意してください。


ありがとう!+1。シェルのグロビングと正規表現で*はどう違う意味を持ちますか?
ティム

2
シェルグロブ *ワイルドカードの意味「の0以上である任意の文字」。正規表現の意味は、otokanの回答で説明されています。
ヨルダン

3

^ 1. *は行全体に一致します。または、前述のとおり、^ 1は行に含まれる文字列を取得します。

正規表現のさまざまなスタイルは、文字を表すさまざまな記号を使用します。一部のオプションは、必要なスタイルを指定します。また、さまざまなオプションで、行全体を一致させるか、その一部のみを一致させるか、入力全体を1つの文字列として一致させるかを指定します。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.