文字列パターン検索

文字列パターン検索

私は Linux 初心者です。システム管理者になりたいです。Amazon の面接を受けました。ファイル内で 's' で始まり 'a' で終わる文字列を検索するコマンドを書くように言われました。grep を使う必要があることは知っていますが、実際のところはわかりません。さらに、grep がどのように機能するかも尋ねられました。誰かこの質問に簡単に答えてもらえませんか。

前もって感謝します

答え1

grepは、指定された入力ファイル(ファイル名が指定されていない場合、またはファイル名としてハイフンマイナス(-)が1つだけ指定されている場合は標準入力)から、指定されたパターンに一致する行を検索します。デフォルトでは、grepは一致する行を出力します。

Grep コマンド

Grep とそのオプション

-v  =   non-matching lines
-c  =   count of matching  lines
-i  =   Ignore  case
-r  =   Read all  files  under  each  directory
-l  =   list the file which contain the searching keyword
 ^      =       Search the Starting word of a file
.$      =       Search the end word of a file
^$      =       Search the empty lines in a file

ファイル上の特定のキーワードに一致するすべての行を検索します。

grep sysadmin /etc/passwd

数字で表示

grep -nv nologin /etc/passwd

キーワードを避けて他のものを検索するには

grep -v sysadmin /etc/passwd

検索しているキーワードに一致する行の数を数える

grep -c sysadmin /etc/passwd

大文字と小文字を区別せずにテキストを検索する

grep -i sysadmin /etc/passwd

およびそのサブディレクトリ内のすべてのファイル/homeで特定のパターンに一致するテキストを検索し、一致する行を出力します。

grep -ri sysadmin /home/

およびそのサブディレクトリ内のすべてのファイル/homeで特定のパターンに一致するテキストを検索し、そのパターンを含むファイルを一覧表示します。

grep -ril sysadmin /home/

多数の IP の中から特定の IP を検索します。 は、リテラル文字に一致する-Fことを保証します。 がない場合、任意の文字に一致します。..

grep -F "192.168.1.10" /var/log/syslog

で始まる行を検索するにはFeb

grep ^Feb /var/log/syslog

で終わる行を検索するにはqueue

grep queue$ /var/log/mail.log

ファイル内の空行を数える(空白を含む行は数えません)

grep -c ^$ /var/log/mail.log

ディレクトリとそのサブディレクトリ内のすべてのファイル内の文字列を検索する

grep -r "root" .

答え2

このGNU grepコマンドを-P(Perl-regex)オプション付きで試してください。

 grep -oP '\bs.*a\b' file

説明:

\b    # Matches the word boundary(ie, match between a word character and a non word character)
s     # Starting character would be a literal s.
.*    # Matches any character zero or more times.
a     # Matches a literal a.
\b    # Matches the word boundary(ie, match between a word character and a non word character)

関連情報