1. 程式人生 > >linux grep 正則表達式

linux grep 正則表達式

匹配 結束 數據 正則 col 查找 nbsp 不同 顯示

命令別名設置
慣用命令特別長的時候可以起一個別名
查看有哪些別名
#alias
#alias rm=‘rm -i‘
去掉命令別名
#unalias lm

grep 可以解析一行文字,取得關鍵字,若該行存在關鍵字,就會整行列出來。

grep [-acinv] [--color=auto] ‘搜索字符串‘ filename

-a:將binary文件以text文件的方式搜尋數據
-c:計算找到‘搜索字符串‘的次數
-i:忽略大小寫的不同,所以大小寫視為相同
-n:輸出行號
-v:反向選擇,亦即顯示出沒有 ‘搜尋字符串‘ 內容的那一行!

#grep -n root /etc/passwd

當前目錄下找出jsen 或者json

#grep -n js[eo]n *

正則表達式

[] :匹配[]內字符,它只代表某“一個”字符,可以是一個單字符,也可以是字符序列。可以使用 - 表示[]內字符序列範圍,如用[1-5]代替[12345]
^word :待查找的字符串(word)在行首 例子:grep -n ‘^#‘ test.txt (查找行首為#開始的那一行,並列出行號)
word$:待查找的字符串word在行尾
\ :轉義字符,將特殊符號的特殊意義去除 例:grep -n \‘ test.txt 查找含義單引號‘的那一行
[^]:反向選擇,
[^g]oo:不想要oo前面有g
. (小數點): 代表一定有一個任意字符的意思

* (星號) : 代表重復零個到無窮多個的前一個字符
\{n,m}\ 連續n到m個的前一個RE字符,若為\{n}\則是連續n個的前一個RE字符,若為\{n\}\則是連續n個以上的前一個RE字符
grep -n ‘go\{2,3}\‘g test.txt 在g與g之間有2到3個o存在的字符串

#grep -n [^g]oo test.txt

oo前面不想要有小寫字符
#grep -n [^a-z]oo test.txt

取得有數字的那一行
#grep -n [0-9] test.text

the 只在行首列出
#grep -n ‘^the‘ test.txt
oo前面不想要小寫字符
#grep -n [^a-z]oo test.txt

開頭是小寫字符的那一行
#grep -n ^[a-z]oo test.txt

#grep -n ‘^[[:lower:]]‘ test.txt

找出行尾結束為小數點(.)的那行
#grep -n ‘\.$‘ test.txt
\為轉義字符

空白行 (命令不起作用)
#grep -n ‘^$‘ test.txt

不要是#的那行
grep -v ‘^#‘

找出g??d的字符,即共有4個字符
grep -n ‘g..d‘ test.txt

查找前面至少有一個o字符
grep -n ‘oo*‘ test.txt

開頭與結尾都是g,但是兩個g之間僅能存在至少一個o
grep -n ‘goo*g‘ test.test

grep -n ‘g*g‘

開頭結尾都是g
grep -n ‘g.*g‘

任意數字行
grep -n ‘[0-9][0-9]*‘ test.txt

練習兩個o字符串
grep -n ‘o\{2}\‘
{} 在shell有特殊意義,因此需要使用轉義字符讓它失去特殊意義字符

g後面接2到5個o
grep -n ‘go\{2,5}\‘ test.txt

列出連接文件標頭會是‘lrwxrwxrwx‘
#ls -l /etc | grep ‘^|‘

sed awk 工具

sed 可以分享 standard input ,而且可以將數據進行替換、刪除、新增、選取特定行的功能

#nl /etc/passwd | sed ‘2,5d‘
刪除2到5行

linux grep 正則表達式