目錄
grep介紹
一、祖傳搭配
二、語法引數
1.語法
第一部分 [-abcef..]
第二部分 abc引數
第三部分 範本樣式
第四部分 文字
2.常用引數
3.常見搭配
字串提取與 -p引數
\k 代表含義
三、總結
查詢檔案裡符合條件的字串
這裡先列舉出常用的搭配,用熟了後可以不過腦子直接寫出
grep -i "abc" # 忽略大小寫
grep -w "abc" # 完全匹配
grep -v "xx" # 不包含某項 即反選
grep -e "word1" -e "word2" # 多條件滿足任意
grep -po '"code":\k\d+' # 提取字串需要提取的字元前加\k
grep [-abcefghhillnqrsvvwxy]
[-abc《顯示行數》][-d《進行動作》]
[-e《範本樣式》][-f《範本檔案》][範本樣式]
[檔案或目錄...]
語法解析
我們按行區分,每行都有代表的意思,詳解如下:
就是常規引數,引數自解釋不用帶value
和linux文字輸出類的命令(如tail、head)一樣
a代表after-context 長引數可用 --after-context=《顯示行數》
b代表before-context 長引數可用 --before-context=《顯示行數》
b代表context簡寫-c=《顯示行數》長引數可用--context=《顯示行數》
-e 後接 範本樣式,就是匹配模式,加不加這個引數都可
-f 如果匹配模式比較複雜,可以寫到檔案裡。這個引數和 sed、awk含義相同
最後也就是我們的待匹配的文字了
這裡只介紹部分常用的
-i --ignore-case忽略字元大小寫的差別
-o --only-matching只顯示匹配pattern 部分
-v --invert-match顯示不包含匹配文字的所有行
-e --extended-regexp將樣式為延伸的正規表示式來使用
-g --basic-regexp將樣式視為普通的表示法來使用
這裡給出常見的幾種需求
1、多條件滿足任意一項即可
echo "word2" | grep -e "word1|word2|word3" # 結果匹配
echo "word3" | grep -e "word1|word2|word3" # 結果匹配
echo "word2" | grep -e "word1" -e "word2" -e "word3" # 或者直接接多個條件 結果匹配
2、多條件同時滿足才匹配
echo "word1 word2 word3" |grep word1 |grep word2 |grep word3 # 匹配
echo "word1 word2 word4" |grep word1 |grep word2 |grep word3 # 不匹配
3、完全匹配
echo "abcfd" |grep "abc" # 普通模式 結果匹配
echo "abcfd" |grep -w "abc" # 全匹配 結果不匹配
echo "abcfd" |grep -w "abcf[a-z]" # 全匹配 最後乙個需要時小寫字元 結果匹配
4、只輸出匹配的部分
$ echo "abcfd" |grep -o "abc" # 普通模式 結果匹配
abc
-o可以只列印我們匹配的結果,但如果我們邏輯複雜一些,需要匹配到字元然後從中提取所需字元怎麼辦呢?
可就是只想提取我們匹配的中一部分
如果我們只需json格式 code對應的數字,如下:
$ echo '' | grep -po '"code":\k\d+'
100$ echo '' | grep -eo '"code":\d+' # 無輸出
$
第二個語句在centos 7、ubuntu環境下沒有任何輸出
但為什麼-p可以匹配?它代表什麼含義呢?正規表示式是支援\d匹配數字的寫法的啊?!
原來這和系統所使用的正規表示式引擎有關
當時在centos下面,grep -e主要是用來支援擴充套件正規表示式,比如|、&這些符號,用於grep多條件查詢,並非是使用標準正規表示式。在shell下面man grep看了下,加上-p(使用perl的正則引擎)即可過濾出目標資料
但是在mac os下面man grep是可以不適用-p引數的,為什麼?因為新的主流正則引擎已經預設加上了-p引數了
\k 是 (?<=pattern) 更高效的簡寫,在所需斷言的語句前加上可以
(?<=pattern) 是正則比較高階的寫法,這裡坐下簡單解釋:
首先()表示捕獲分組,()會把每個分組裡的匹配的值儲存起來,從左向右,以分組的左括號為標誌,第乙個出現的分組的組號為1,第二個為2,以此類推
(?<=pattern) 代表反向(look behind)肯定預查,就是捕獲以pattern開頭的內容***
例如,"(?<=95|98|nt|2000)windows
" 能匹配"2000windows
"中的"windows
",但不能匹配"3.1windows
"中的"windows
"
也就是說"windows" 的匹配依賴於它前面的型號是否能匹配上,只有型號和"windows"字元都匹配了才能匹配
Linux文字處理命令
4 linux文字處理命令sort命令 sort命令的功能是對檔案中的各行進行排序。sort命令有許多非常實用的選項,這些選項最初是用來對資料庫格式的檔案內容進行各種排序操作的。實際上,sort命令可以被認為是乙個非常強大的資料管理工具,用來管理內容類似資料庫記錄的檔案。sort命令將逐行對檔案中的...
Linux文字處理命令
1.tac 它和cat是反的,倒著輸出,先輸出最後一行,接著是倒數第二行,最後輸出的是第一行 2.rev reverse 先輸出最後乙個字元,接著是倒數第二個字元,最後才是第乙個字元,下面這個命令可以把輸入全部倒過來 tac f.txt rev 3.head 只顯示文字的開頭幾行,比如 head 2...
linux文字處理命令
sed grep find xargs 1.替換檔案內容sed i s test01 test02 g grep rl test01 home forum 說明 在 home forum目錄下,grep出含有test01字串的檔案,然後把test01替換成test02 2.sed替換換行符參考 se...