web-dev-qa-db-ja.com

Ubuntuで「1」で始まるgrep行

「1」で始まる行を検索してみます

ls -1 | grep ^1*

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

48
Tim

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

71
otokan

以下を試しましたか?

 ls -1 | grep "^1"

つまり、*を削除します。これは、基本的にgrepに通知し、^1式の出現を0個以上検出します。言い換えると、1で始まるかどうかに関係なく、行を一致させます。

35
Bernhard

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

ls -ld 1*

シェルグロブを使用して、1で始まるすべてのファイルを一覧表示できます。 *の意味は、シェルグロビングでは正規表現とは異なります。

13
jordanm

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

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

3
Shellukolle