Day06筆記總結:grep與正則表達式

Title: grep與正則表達式
Date: 2018-04-08
Author: Alvin

一、描述

搜索符合條件的所有行,并將結果輸出到STDOUT;
默認搜索匹配的PATTEN在行中的位置不確定。
二、常見用法
grep PATTEN FILE
//搜索匹配PATTEN字符串的所有行
//PATTEN:過濾條件,也叫搜索匹配條件
“root”??????? //字符串
“$USER”?????? //變量–>字符串
`whoami`????? //命令–>執行結果–>字符串
grep -v PATTEN FILE
//搜索匹配不包含PATTEN符串的所有行
grep -n PATTEN FILE
//搜索結果加行號
//等價寫法:cat -n FILE | grep PATTEN
grep -i PATTEN FILE
//PATTEN字符串忽略大小寫
grep -o PATTEN FILE
//只搜索PATTEN字符串本身
grep -q PATTEN FILE
//靜默執行,不顯示結果
//等價寫法:grep PATTEN FILE &> /dev/null
$?? ??? 0?? ??? //有包含PATTEN的行
$?? ??? 1?? ??? //無包含PATTEN的行
grep -A3 PATTEN FILE
//包含PATTEN字符串的后3行也做顯示
grep -B3 PATTEN FILE
//包含PATTEN字符串的前3行也做顯示
grep -C3 PATTEN FILE
//包含PATTEN字符串的前3行和后3行也做顯示
grep PATTEN1 FILE | grep PATTEN2
//過濾同時包含PATTEN1和PATTEN2的所有行
grep -e PATTEN1 -e PATTEN2 FILE
//過濾包含PATTEN1或PATTEN2任意一個的所有行
grep -w WORDS FILE
//過濾包含WORDS單詞的所有行
//在grep視角,
字母、數字、下劃線:都屬于單詞的一部分
其他字符:視為單詞的分隔符
grep -f PATTENLIST FILE
//先把PATTENLIST的內容識別成一個或多個PATTEN
PATTEN1 PATTEN2 […]
//然后過濾包含PATTEN1或PATTEN2或[…]任意一個的所有行
//等價寫法:grep -e PATTEN1 -e PATTEN2 [-e […]] FILE
grep -E EXT_PATTEN FILE
//支持擴展的正則表達式
三、正則表達式(一):字符匹配
echo STRINGS | grep PATTEN
//用于字符匹配的特殊字符
.????? ??? ??? //表示一個任意字符
\.???? ??? ??? //轉義字符,表示 . 本身
[.]??????? ??? //中括號里面的 . 表示 . 本身,不需要轉義
[xyz]????? ??? //取集合[x,y,z]中任意一個字符
[^xyz]???? ??? //取集合的補集中任意一個字符(不再包含x/y/z)
四、正則表達式(二):匹配次數
echo STRINGS | grep PATTEN
//用于匹配次數的特殊字符
c*???????? ??? //表示字符c出現任意次數(零次/一次/多次)
.*???????? ??? //表示任意一個字符出現任意次數(零次/一次/多次)
[a-z]*???? ??? //表示集合[a-z]閉區間中的任意一個字符出現任意次數(零次/一次/多次)
c\???????? ??? //表示字符c最多出現一次(零次/一次)
.\???????? ??? //表示任意一個字符最多出現一次(零次/一次)
[a-z]\???? ??? //表示集合[a-z]閉區間中的任意一個字符最多出現一次(零次/一次)
c\+??????? ??? //表示字符c至少出現一次(一次/多次)
.\+??????? ??? //表示任意一個字符至少出現一次(一次/多次)
[a-z]\+??? ??? //表示集合[a-z]閉區間中的任意一個字符至少出現一次(一次/多次)
c\{16,\}?? ??? //表示字符c至少出現16次(16次/16+次)
c\{16,20\}??? //表示字符c至少出現16次,但最多出現20次(16次/17次/18次/19次/20次)
c\{,20\}????? //表示字符c最多出現20次(零次/一次/……/20次)
五、正則表達式(三):位置錨定
echo STRINGS | grep PATTEN
//用于位置錨定的特殊字符
^str????????? //表示以字符串str開頭的行(行首)
str$????????? //表示以字符串str結尾的行(行尾)
^$??????????? //表示完全的空行(無法過濾含有不可見字符的假空行)
^[:space:]*$? //表示包含空格鍵或Tab鍵的假空行和完全的空行(徹底過濾包含不可見字符的假空行)
\<word??????? //表示以字符串word為詞首的單詞(詞首)
word\>??????? //表示以字符串word為詞尾的單詞(詞尾)
\<word\>????? //表示以字符串word為詞首和詞尾的單詞(詞首+詞尾)
\bword\b????? //界定符\b是單詞的邊界,表示把字符串word當做一個獨立的單詞(界定符)
//在grep視角,
字母、數字、下劃線:都屬于單詞的一部分
其他字符:視為單詞的分隔符
六、正則表達式(四):分組
echo STRINGS | grep PATTEN
//用于分組的特殊字符
\(str\)?????? //表示把字符串str整體當成一個分組
\(str\)\{3,\} //表示字符串分組str至少出現3次
\(str\).*\1?? //等價寫法: \(str\).*\(str\)
// \1 表示 \(str\) ,相當于字符串分組str
//表示把字符串分組str整體當作一個參考,在 .* 后必須出現一模一樣的字符串分組str
//分組的匹配結果必須一樣
\(str1\)\?.*\(str2\)\+\1.*\2
//等價寫法: \(str1\)\?.*\(str2\)\+\(str1\)\?.*\(str2\)\+
// \1 代表 \(str1\)\? ,相當于字符串分組str1
// \2 代表 \(str2\)\+ ,相當于字符串分組str2
//表示把字符串分組str1整體當作一個參考,在 .* 后必須出現一模一樣的字符串分組str1
//表示把字符串分組str2整體當作一個參考,在 .* 后必須出現一模一樣的字符串分組str2
//分組的匹配結果必須一樣
^\<\(word\)\>.*\1$
//等價寫法: ^\<\(word\)\>.*\<\(word\)\>$
// \1 代表 \<\(word\)\> ,相當于字符串分組str
//表示把單詞word當作一個參考,在 .* 后必須出現一模一樣的單詞word
//在grep視角,
字母、數字、下劃線:都屬于單詞的一部分
其他字符:視為單詞的分隔符
//分組的匹配結果必須一樣
a\|b????????? //表示字符a或者字符b
^\(str1\|str2\)

//表示以字符串str1或者字符串str2作為行首

-EOF-

本文來自投稿,不代表Linux運維部落立場,如若轉載,請注明出處:http://www.www58058.com/95429

(0)
M30-Alvin阿峰M30-Alvin阿峰
上一篇 2018-04-08
下一篇 2018-04-08

相關推薦

  • Linux的哲學思想

    1.一切皆文件
    2.小型,單一用途的程序
    3.配置信息保存在文本文件中
    4.盡量避免與用戶交互

    Linux筆記 2018-05-11
  • 第六周筆記

    進程顯示工具 ps -ef(有些人喜歡用)ps 帶-不帶-不一樣a 包括所有終端的進程x 包括不連接的進程u 顯示進程所有者的信息f 選項顯示樹進程 –foresto 屬性 選項顯示定制的信息 pid,cmd,%cpu,%mem ps xo pid,cmd,%cpu,ttyL 顯示支持的屬性列表k|–sort 屬性 對屬性排序,屬性前…

    Linux筆記 2018-05-06
  • 實驗:實現互聯網的DNS架構

    實現互聯網DNS分布式架構,當客戶端訪問時,經各級自建DNS解析,最終指向Web1或者Web2服務器httpd服務

    2018-06-05
  • 日?!猻ed練習

    1、刪除centos7系統/etc/grub2.cfg文件中所有以空白開頭的行行首的空白字符# sed -i.bak ‘s/^[[:space:]]*//’ /data/grub2.cfg2、刪除/etc/fstab文件中所有以#開頭,后面至少跟一個空白字符的行的行首的#和空白字符# sed -i.bak ‘s@^#[[:…

    2018-04-13
  • MySQL之用戶與權限管理

    本節索引: 一、MySQL用戶管理 二、MySQL權限管理 三、操作:破解Mysql數據庫口令 一、MySQL用戶管理 用戶賬號: MySQL的用戶賬號由兩部分組成:用戶名+主機名 ‘USERNAME’@’HOST’ 其中: 主機名HOST可以是IP地址或Network; 如:wxlinux@192.168.3…

    2018-06-09
  • 第五周作業

    1、簡述rpm與yum命令的常見選項,并舉例
    2、自建yum倉庫,分別為網絡源和本地源
    3、簡述at和crontab命令,制定 每周三凌晨三、五點10分執行某個腳本,輸出當前時間,時間格式為 2017-12-28 10:00:00
    4、簡述sed常用操作命令,并舉例

    Linux筆記 2018-06-11
欧美性久久久久