私は 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)