字串模式搜尋

字串模式搜尋

我是 Linux 新手。我想被任命為系統管理員。我參加了亞馬遜的面試。他們要求我編寫一個cmd來查找檔案中以“s”開頭並以“a”結尾的字串。我知道我們必須使用 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嘗試使用(Perl-regex) 選項的GNU grep 指令,

 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)

相關內容