私はLinuxに初めて触れました。システム管理者に任命されたい。 Amazonでインタビューしました。彼らはファイル内の「s」で始まり、「a」で終わる文字列を見つけるためにcmdを書くように頼んだ。 grepを使用する必要があることは知っていますが、実際の状況はわかりません。何よりも、彼らはgrepがどのように機能するのか尋ねます。誰でもこの質問に簡単に答えることができますか?
事前にありがとう
答え1
grepは、名前付き入力ファイル(またはファイル名が指定されていない場合、または単一のハイフンマイナス記号(-)がファイル名として指定されている場合は標準入力)から、指定されたPATTERNと一致する行を検索します。デフォルトでは、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
-P
GNU grepコマンドの(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)