企業(yè)起名網(wǎng)站怎么做搜索引擎營銷的分類
? ? 文件搜索是搜索查找符合條件的某文件的目錄,若要編輯文件或對文件的某配置進行修改,就需要對文件內容進行搜索。
? ??grep
?命令是 Linux 及類 Unix 操作系統(tǒng)中的一個強大的文本搜索工具,用于搜索一個或多個文件中匹配給定模式的行。grep
?代表“Global Regular Expression Print”,意味著它使用正則表達式作為搜索模式,并且能夠全局地在文件中查找匹配的文本。
拓展:正則表達式
正則表達式(Regular Expression,通常縮寫為 regex、regexp 或 RE)是一種用于文本模式匹配的強大工具。它使用特定的字符序列來描述、匹配和操作字符串,可以用于搜索、替換、提取或驗證文本數(shù)據(jù)中符合特定模式的字符串。普通字符表示它們自身,而特殊字符則具有特定的含義,用來表示字符類、數(shù)量限定符、位置或序列查找等功能。?
正則表達式的核心在于其元字符(Metacharacter),這些字符具有特殊的含義,能夠代表更廣泛的字符集或模式。以下是一些常見的元字符:
- ?`.`:匹配任何單個字符(除了換行符)。
- `^`:表示行的開始。
- `$`:表示行的結束。
- `*`:匹配前一個字符零次或多次。
- `+`:匹配前一個字符一次或多次。
- `?`:匹配前一個字符零次或一次。
- `{m,n}`:匹配前一個字符至少 m 次,至多 n 次。
- `[ ]`:字符集,匹配括號內的任何一個字符。
- `|`:表示“或”,匹配左邊或右邊的表達式。
- `()`:用于分組,改變優(yōu)先級或捕獲匹配的部分。
正則表達式還支持更多高級特性,如非捕獲組、前瞻斷言、后瞻斷言等,這使得它能夠處理更為復雜的匹配邏輯。
正則表達式在各種編程語言和工具中都有應用,如 Perl、Python、JavaScript、Java、.NET、Unix shell 工具(如 sed 和 grep)等。它們被廣泛用于數(shù)據(jù)清洗、文本解析、表單驗證、日志分析等各種場景中。
例如,下面是一個簡單的正則表達式示例,用于匹配郵箱地址:
[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}
在這個表達式中:
1. [a-zA-Z0-9._%+-]+:
- 這個部分匹配用戶名。方括號 `[ ]` 定義了一個字符集,其中包含的字符都可以匹配。
- `a-z` 和 `A-Z` 匹配任何小寫字母或大寫字母。
- `0-9` 匹配任何數(shù)字。
- `._%+-` 匹配下劃線、點號、百分號、加號和減號。
- `+` 在這里表示前面的字符集可以重復一次或多次。
2. @:
- ? ?直接匹配 @ 符號,這是電子郵件地址中用戶名和域名之間的分隔符。
3. [a-zA-Z0-9.-]+:
- ? ?同樣使用了字符集來匹配域名部分,與用戶名部分相似,但是不包括 `%+-`,因為這些字符在域名中通常不會出現(xiàn)。
- 再次,`+` 表示這個字符集中的任意字符可以重復一次或多次。
4. \.:
- ? ?點號(`.`)在正則表達式中有特殊含義,所以要匹配實際的點號,需要使用反斜杠(`\`)來轉義它。
5. [a-zA-Z]{2,}:
- ? ? ?最后一部分用于匹配頂級域名,如 ".com"、".org" 等。
- [a-zA-Z]表示任何字母。
- {2,}?表示這部分至少有2個字母,但實際上沒有上限,盡管大多數(shù)頂級域名不會超過3或4個字母。
將這些部分組合起來,整個正則表達式可以匹配大多數(shù)常見的電子郵件地址格式,例如:
·`joha.den@example.com`
·`info@company.co.uk`
——————————————————————————————————————————
grep的基本語法:
grep [options] pattern [file]
pattern
?是你想要搜索的文本或正則表達式。file
?是你要在其中搜索的文件名。如果沒有指定文件,grep
?會從標準輸入中讀取數(shù)據(jù)。
常用選項
-i
:忽略大小寫。-v
:反向搜索,即顯示不匹配的行。-c
:只顯示匹配的行數(shù),而不是顯示行的內容。-n
:顯示匹配的行號。-r
?或?-R
:遞歸搜索,即搜索指定目錄下的所有文件。
注意事項
- 使用正則表達式時,某些特殊字符需要被轉義,例如點號(
.
)、星號(*
)等。 - 如果?
pattern
?包含空格,需要用引號包裹起來。 grep
?支持多種模式,包括固定字符串、正則表達式等。
?應用:
1.抓取已知文檔的關鍵字
如上圖,grep對某文件的關鍵字進行抓取,輸出的是帶有該關鍵字的行內容,所有包含該關鍵字的行都會被抓取出來。
2.單純的知道行的內容不便于我們修改,如果我們想知道該元素在哪行該怎么辦?
如上,即加入-n 即第137行。
驗證(用前面學過的cat可以驗證一下該元素在哪一行)
即cat -n H.txt
3.除此之外,還有一個選項是反向搜索-v,即不包括后面關鍵字的行。
這種搜索有什么用呢?
? ??其中etc路徑下存儲配置文件,前面加的#代表注釋,解釋說明的作用,初期對文件不了解時可以借助注釋簡要了解,但是后期在對服務器運維的過程中,注釋過多可能會導致占用內存過多,會影響我們修改文件,所以后期會去掉注釋,這時我們就可以利用grep -v '#' /etc/services
? ? 其中注釋分為以#開頭的注釋和中間有#的注釋兩部分,如下圖。
? ? ?上個命令會把所有帶#的行都抓取出來,若只想把以#開頭的注釋提取出來,需要在‘#’前加一個^
? ? 與之對應,$符號表示以某關鍵字結尾,其中該關鍵字要放在$前面,比如下圖以s結尾
? ? ?上文我們想去掉注釋,但是上面的方法把#不在句首的行也去掉了,也就是說,有一部分的有用信息被去掉了。所以要去掉的是以#開頭的行,
4. 之前說過,Linux系統(tǒng)是嚴格區(qū)分大小寫的,如果不想?yún)^(qū)分大小寫,需要加入選項-i,如
grep -i abc H.txt
?5.組合使用,搜索當前目錄及其子目錄中所有 .txt
文件里包含 "s" 的行: