linux grep 正則表達式
命令別名設置
慣用命令特別長的時候可以起一個別名
查看有哪些別名
#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
正則表達式
[] :匹配[]內字符,它只代表某“一個”字符,可以是一個單字符,也可以是字符序列。可以使用 - 表示[]內字符序列範圍,如用[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 正則表達式