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 17:07
下一篇 2018-04-08 17:11

相關推薦

  • linux下find的用法及練習

    find命令詳解

    Linux筆記 2018-04-15
  • AWK

    ### awk awk分為nawk,gawk 我們shell中常用的awk 其版本是gawk “`AWK會把file中的每一行(記錄/可以指定分隔符),讀入空間中并默認以空白(TAB\space\\n)等分割成幾個字段,每個字段用$#表示$0表示整行本身“` awk [Option] ‘program’ file option -F:…

    Linux筆記 2018-05-20
  • 路由

    地址分類有類的 固定的網絡ID 是多少位就是多少位A 前8位是網絡ID0-127.x.x.x其中0.x.x.x是未知地址,不能用127.x.x.x是回環地址,不能用所以有1-126個網段可用公式:網絡(網段)數量=2^可變網絡ID位數一個網絡的主機數量=2^主機ID位數-2所以一個A類網絡主機數有1600萬netmask:255.0.0.0 B類128-19…

    Linux筆記 2018-05-06
  • Linux文本處理三劍客之awk

    本文主要介紹:awk的基本用法、變量、格式化輸出、操作符、條件判斷、循環、數組、函數、調用系統命令及awk腳本

    2018-05-28
  • Linux系統學習開篇第一章

    開篇筆記摘要

    Linux筆記 2018-05-14
欧美性久久久久