9.2 grep(中)

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 //列出全部不帶數字的行
    • -n 表示顯示行號
[root@hf-01 grep]# grep -v '[0-9]' /etc/passwd
[root@hf-01 grep]#
  • 在vim編輯文件的時候,列出行號
    • 命令 /set nu //列出每一行的行號

grep命令 -v '^#'

  • grep -vn '^#' inittab //列出文件中全部不以 #號 開頭的文件
    • -v 表示取反
    • ^# 表示以#號開頭的文件
[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,只要不是數字,就都會匹配出來
    • 只要其中1個字符符合要求就會匹配出來
[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] 表示以什麼什麼開頭
相關文章
相關標籤/搜索