grep用法
- grep -n 'root' /etc/passwd
- grep -nv 'nologin' /etc/passwd
- grep '[0-9]'/etc/inittab
- grep -v '[0-9]'/etc/inittab
- grep -v '^#' inittab
- grep -v '^#' /etc/inittab|grep -v '^$'
- grep '^[^a-zA-Z]' test.txt
grep命令 '[0-9]'
- grep '[0-9]' passwd 表示數字,從0到9的數字
[root@hf-01 grep]# grep '[0-9]' passwd //過濾出全部帶數字的行
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
mysql:x:1000:1000::/home/mysql:/bin/bash
等等,只截取了一部分
[root@hf-01 grep]#
grep命令 -v '[0-9]'
- grep -vn '[0-9]' /etc/passwd //列出全部不帶數字的行
[root@hf-01 grep]# grep -v '[0-9]' /etc/passwd
[root@hf-01 grep]#
grep命令 -v '^#'
- grep -vn '^#' inittab //列出文件中全部不以 #號 開頭的文件
[root@hf-01 grep]# cp /etc/inittab ./ //不能直接改動,由於/etc/inittab是系統開機配置問件
[root@hf-01 grep]# vim inittab
[root@hf-01 grep]# grep -nv '^#' inittab
5:fadfdfasfas
7:113465142111
12:%$#@$#*&^$%$#
grep命令兩次取反 -v
- grep -v '^#' inittab |grep -v '^1' // 第一次列出不以#號 開頭的文件,第二次列出不以數字1開頭的文件
- 不能在第一次取反的時候,加-n 參數顯示行號
- 由於在第一次取反後列出行號,在第二次取反後,會把第一次取反的行號也當作文件中的內容
- 如果在第二次處加-n參數則是能夠的
[root@hf-01 grep]# grep -v '^#' inittab|grep -v '^1'
fadfdfasfas
%$#@$#*&^$%$#
[root@hf-01 grep]# grep -v '^#' inittab|grep -v '^f'
113465142111
%$#@$#*&^$%$#
[root@hf-01 grep]# grep -v '^#' inittab|grep -v '^%'
fadfdfasfas
113465142111
在第一次取反 加入-n ,會把顯示的行號默認成內容
[root@hf-01 grep]# grep -nv '^#' inittab|grep -nv '^1'
1:5:fadfdfasfas
2:7:113465142111
在第二次取反的時候,加-n參數,會看到顯示的行號新的星號
這是由於第二次取反會把第一次取反後得出的結果,輸入到第二次取反(默認是一個新文件)
[root@hf-01 grep]# grep -v '^#' inittab |grep -nv '^1'
1:fadfdfasfas
3:%$#@$#*&^$%$#
[root@hf-01 grep]# grep -v '^#' inittab|grep -nv '^%'
1:fadfdfasfas
2:113465142111
- 取反總結:
- 加 -n 參數 在兩次(或屢次)取反的時候,只能在最後一次取反加 -n 參數,由於取反的時候,會把列出的行號被默認成文件內容,因此取反的時候慎用 -n參數
grep命令 '^[^a-zA-Z]'
- grep '[^0-9]' inittab //表示非0到9,只要不是數字,就都會匹配出來
[root@hf-01 grep]# grep '[^0-9]' inittab
# inittab is no longer used when using systemd.
#
fadfdfasfas
# multi-user.target: analogous to runlevel 3
%$#@$#*&^$%$#
等等等,只截取了一部分
- grep -v '[^0-9]' inittab //列出以數字開頭的行
- 分析:就是 [^0-9] 先列出非數字的開頭的行,而後 -v 取反,列出數字開頭的行
[root@hf-01 grep]# grep -v '[^0-9]' inittab
113465142111
- grep '^[^a-zA-Z]' inittab 非數字的字符開頭的行
[root@hf-01 grep]# grep '^[^0-9]' inittab
# inittab is no longer used when using systemd.
#
fadfdfasfas
# multi-user.target: analogous to runlevel 3
%$#@$#*&^$%$#
# graphical.target: analogous to runlevel 5
#
等等等,只截取了一部分
- grep -nv '^[^0-9]' inittab 非數字的行列出,而後取反顯示行號
[root@hf-01 grep]# grep -nv '^[^0-9]' inittab
7:113465142111
- 總結: 符號 ^ 表示以什麼什麼開頭
- 若放在方括號裏面去 [^0-9] 就表示這個方括號裏面的反義,取非 的意思
- 若^符號放在[] 方括號外面 ^[^0-9] 表示以什麼什麼開頭