我是 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)