第十一課(下):grep,sed,awk三劍客

grep命令

  • grep [-cinvABC] 'word' filename
  • -c 行數
  • -i 不區分大小寫
  • -n 顯示行號
  • -v 取反
  • -r 遍歷全部子目錄
  • -A 後面跟數字,過濾出符合要求的行以及下面n行
  • -B 後面跟數字,過濾出符合要求的行以及上面n行
  • -C 後面跟數字,同時過濾出符合要求的行以及上下各n行

  • -c行數
[root@localhost ~]# cp /etc/passwd test.txt
[root@localhost ~]# cat test.txt 
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
polkitd:x:999:997:User for polkitd:/:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
chrony:x:998:996::/var/lib/chrony:/sbin/nologin
[root@localhost ~]# grep -c 'nologin' test.txt 
15
  • -n顯示行號
[root@localhost ~]# grep -n 'nologin' test.txt 
2:bin:x:1:1:bin:/bin:/sbin/nologin
3:daemon:x:2:2:daemon:/sbin:/sbin/nologin
4:adm:x:3:4:adm:/var/adm:/sbin/nologin
5:lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
9:mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
10:operator:x:11:0:operator:/root:/sbin/nologin
11:games:x:12:100:games:/usr/games:/sbin/nologin
12:ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
13:nobody:x:99:99:Nobody:/:/sbin/nologin
14:systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
15:dbus:x:81:81:System message bus:/:/sbin/nologin
16:polkitd:x:999:997:User for polkitd:/:/sbin/nologin
17:postfix:x:89:89::/var/spool/postfix:/sbin/nologin
18:sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
19:chrony:x:998:996::/var/lib/chrony:/sbin/nologin
  • -i不區分大小寫
[root@localhost ~]# grep -i 'nologin' test.txt 
bin:x:1:1:bin:/bin:/sbin/NOlogin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
systemd-network:x:192:192:systemd Network Management:/:/sbin/nologi
dbus:x:81:81:System message bus:/:/sbin/nologin
polkitd:x:999:997:User for polkitd:/:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
chrony:x:998:996::/var/lib/chrony:/sbin/nologin
  • -v取反
[root@localhost ~]# grep -iv 'nologin' test.txt 
root:x:0:0:root:/root:/bin/bash
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
  • -r遍歷全部子目錄
[root@localhost ~]# grep -r 'root' /etc/ > 2.txt 
[root@localhost ~]# grep -r '/etc/passwd' 2.txt 
/etc/passwd:root:x:0:0:root:/root:/bin/bash
/etc/passwd:operator:x:11:0:operator:/root:/sbin/nologin
/etc/passwd-:root:x:0:0:root:/root:/bin/bash
/etc/passwd-:operator:x:11:0:operator:/root:/sbin/nologin
  • -A後面跟數字,過濾出符合要求的行以及下面n行
[root@localhost ~]# grep -nA2 'root' test.txt 
1:root:x:0:0:root:/root:/bin/bash
2-bin:x:1:1:bin:/bin:/sbin/NOlogin
3-daemon:x:2:2:daemon:/sbin:/sbin/nologin
--
10:operator:x:11:0:operator:/root:/sbin/nologin
11-games:x:12:100:games:/usr/games:/sbin/nologin
12-ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
  • -B後面跟數字,過濾出符合要求的行以及上面n行
[root@localhost ~]# grep -nB2 'root' test.txt 
1:root:x:0:0:root:/root:/bin/bash
--
8-halt:x:7:0:halt:/sbin:/sbin/halt
9-mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
10:operator:x:11:0:operator:/root:/sbin/nologin
  • -C後面跟數字,同時過濾出符合要求的行以及上下各n行
[root@localhost ~]# grep -nC2 'root' test.txt 
1:root:x:0:0:root:/root:/bin/bash
2-bin:x:1:1:bin:/bin:/sbin/NOlogin
3-daemon:x:2:2:daemon:/sbin:/sbin/nologin
--
8-halt:x:7:0:halt:/sbin:/sbin/halt
9-mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
10:operator:x:11:0:operator:/root:/sbin/nologin
11-games:x:12:100:games:/usr/games:/sbin/nologin
12-ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin

grep/egrep示例

  • grep -n '[0-9]' test1.txt 列出test1.txt中包含數字的行。
[root@localhost ~]# grep -n '[0-9]' test1.txt 
9:# multi-user.target: analogous to runlevel 3
10:# graphical.target: analogous to runlevel 5
  • grep -vn '[0-9]' test1.txt 取反,列出test.txt中不帶數字的行
[root@localhost ~]# grep -vn '[0-9]' test1.txt
1:# inittab is no longer used when using systemd.
2:#
3:# ADDING CONFIGURATION HERE WILL HAVE NO EFFECT ON YOUR SYSTEM.
4:#
5:# Ctrl-Alt-Delete is handled by /usr/lib/systemd/system/ctrl-alt-del.target
6:#
7:# systemd uses 'targets' instead of runlevels. By default, there are two main targets:
8:#
11:#
12:# To view current default target, run:
13:# systemctl get-default
14:abcdefg
15:#
16:# To set a default target, run:
17:# systemctl set-default TARGET.target
18:#
  • grep -nv '^#' test1.txt 列出test1.txt中不是以#號開頭的
[root@localhost ~]# grep -nv '^#' test1.txt 
14:abcdefg
  • grep -n '^#' test1.txt 列出test1.txt中以#號開頭的
[root@localhost ~]# grep -n '^#' test1.txt 
1:# inittab is no longer used when using systemd.
2:#
3:# ADDING CONFIGURATION HERE WILL HAVE NO EFFECT ON YOUR SYSTEM.
4:#
5:# Ctrl-Alt-Delete is handled by /usr/lib/systemd/system/ctrl-alt-del.target
6:#
7:# systemd uses 'targets' instead of runlevels. By default, there are two main targets:
8:#
9:# multi-user.target: analogous to runlevel 3
10:# graphical.target: analogous to runlevel 5
11:#
12:# To view current default target, run:
13:# systemctl get-default
15:#
16:# To set a default target, run:
17:# systemctl set-default TARGET.target
18:#
  • grep -v '^#' test1.txt |grep -v '^$'
[root@localhost ~]# grep -nv '^#' test1.txt |grep -v '^$'
9:$123456
16:abcdefg
  • grep '^[^0-9]' test1.txt 表示列出以非數字的字符開頭的
[root@localhost ~]# grep -n '^[^0-9]' test1.txt 
1:# inittab is no longer used when using systemd.
2:#
3:# ADDING CONFIGURATION HERE WILL HAVE NO EFFECT ON YOUR SYSTEM.
4:#
5:# Ctrl-Alt-Delete is handled by /usr/lib/systemd/system/ctrl-alt-del.target
6:#
7:# systemd uses 'targets' instead of runlevels. By default, there are two main targets:
8:#abc123$
9:$123456
11:aaabbbccc
13:# multi-user.target: analogous to runlevel 3
14:# graphical.target: analogous to runlevel 5
15:#
16:# To view current default target, run:
17:# systemctl get-default
18:abcdefg
19:#
20:# To set a default target, run:
21:# systemctl set-default TARGET.target
22:#
  • grep -nv '^[^0-9]' test1.txt 表示列出以數字的字符開頭的,包括空白行。^在中括號裏面表示 非, 在中括號外面表示以 …… 開頭。
[root@localhost ~]# grep -nv '^[^0-9]' test1.txt 
10:123
12:
  • grep "r..t" test1.txt 列出test1.txt中r和t之間兩個字母的內容
[root@localhost ~]# grep "r..t" test1.txt 
# Ctrl-Alt-Delete is handled by /usr/lib/systemd/system/ctrl-alt-del.target
# systemd uses 'targets' instead of runlevels. By default, there are two main targets:
# multi-user.target: analogous to runlevel 3
# graphical.target: analogous to runlevel 5
# To view current default target, run:
# To set a default target, run:
# systemctl set-default TARGET.target
  • grep "r.*t" test1.txt 匹配在r和t之間的任意字符
[root@localhost ~]# grep "r.*t" test1.txt
# inittab is no longer used when using systemd.
# Ctrl-Alt-Delete is handled by /usr/lib/systemd/system/ctrl-alt-del.target
# systemd uses 'targets' instead of runlevels. By default, there are two main targets:
# multi-user.target: analogous to runlevel 3
# graphical.target: analogous to runlevel 5
# To view current default target, run:
# To set a default target, run:
# systemctl set-default TARGET.target
  • grep 'o\ {2\ }' text1.txt =egrep 'o{2}' test.txt
[root@localhost ~]# grep 'o\{2\}' test.txt 
root:x:0:0:root:/root:/bin/bash
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
[root@localhost ~]# egrep 'o{2}' test.txt 
root:x:0:0:root:/root:/bin/bash
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
  • grep 'o\ {1,3\ }' test.txt = egrep 'o{1,3}' test.txt 表示test.txt文件中,字母o 出現的1次至3次的內容
[root@localhost ~]# grep 'o\{1,3\}' test.txt
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/NOlogin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
polkitd:x:999:997:User for polkitd:/:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
chrony:x:998:996::/var/lib/chrony:/sbin/nologin
[root@localhost ~]# egrep 'o{1,3}' test.txt
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/NOlogin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
polkitd:x:999:997:User for polkitd:/:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
chrony:x:998:996::/var/lib/chrony:/sbin/nologin
  • grep -E 'root|nologin' test.txt 表示匹配root 或者nologin 的文件內容 = egrep'root|nologin' test.txt
[root@localhost ~]# grep -E 'root|nologin' test.txt 
root:x:0:0:root:/root:/bin/bash
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
systemd-network:x:192:192:systemd Network Management:/:/sbin/nologi
dbus:x:81:81:System message bus:/:/sbin/nologin
polkitd:x:999:997:User for polkitd:/:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
chrony:x:998:996::/var/lib/chrony:/sbin/nologin
[root@localhost ~]# egrep 'root|nologin' test.txt
root:x:0:0:root:/root:/bin/bash
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
systemd-network:x:192:192:systemd Network Management:/:/sbin/nologi
dbus:x:81:81:System message bus:/:/sbin/nologin
polkitd:x:999:997:User for polkitd:/:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
chrony:x:998:996::/var/lib/chrony:/sbin/nologin

sed 命令

主要是用來說數據進行選取、替換、刪除、新增的命令,若是不加-i選項是不會更改文件內容的,若是不肯定的狀況下,儘可能不要更改系統中的配置文件。python

  • sed [選項] '[動做]' 文件名

選項

  • -n :通常sed命令會把全部數據都輸出到屏幕上,若是加上-n 則會把通過sed命令處理過的命令輸出到屏幕上。
  • -e: 容許對輸入數據應用多條sed命令編輯
  • -i:用sed的修改結果直接修改讀取數據的文件,而不是由屏幕輸出

動做

  • a:追加,在當前行後添加一行或多行
  • c:行替換,用c後面的字符串替換原數據行
  • i:插入,在當前行插入一行或者多行
  • d:刪除,刪除指定的行
  • p:打印,輸出指定的行
  • s:字符串替換,用一個字符串替換另一個字符串。格式爲「行範圍s/舊字串/新字串/g"

-n :通常sed命令會把全部數據都輸出到屏幕上,若是加上-n 則會把通過sed命令處理過的命令輸出到屏幕上。linux

[root@localhost ~]# sed -n '/adm/'p test.txt 
adm:x:3:4:adm:/var/adm:/sbin/nologin
  • p打印1.txt 文件中的第二行
[root@localhost ~]# cat 1.txt 
aaa
bbb
ccc
111
222
333

[root@localhost ~]# sed -n '2'p 1.txt 
bbb
  • sed '2a hello word' 1.txt 在文件1.txt中第二行後面添加一行內容 hello word
[root@localhost ~]# sed '2a hello word' 1.txt 
aaa
bbb
hello word
ccc
111
222
333
  • sed '2i hello word' 1.txt 在文件1.txt中第二行前面添加一行內容 hello word
[root@localhost ~]# sed '2i hello word' 1.txt 
aaa
hello word
bbb
ccc
111
222
333
  • sed '2d' 1.txt 刪除1.txt文件內容中的第二行
[root@localhost ~]# sed '2d' 1.txt
aaa
ccc
111
222
333
  • sed '4c 444' 1.txt 將1.txt 文件內容中的第四行替換爲 444
[root@localhost ~]# sed '4c 444' 1.txt 
aaa
bbb
ccc
444
222
333
  • sed '1s/aaa/a1a/g' 1.txt 將第一行的aaa更改成a1a
[root@localhost ~]# sed '1s/aaa/a1a/g' 1.txt 
a1a
bbb
ccc
111
222
333
  • sed -i '1s/aaa/a1a/g' 1.txt 更改文件的內容並不輸出
[root@localhost ~]# sed -i '1s/aaa/a1a/g' 1.txt 
[root@localhost ~]# cat 1.txt 
a1a
bbb
ccc
111
222
333
  • [root@localhost ~]# sed -e '1c 111' -e '2c 222' 1.txt 使用-e命令執行多條sed命令。將第一行更改成111,第二行更改成222
[root@localhost ~]# sed -e '1c 111' -e '2c 222' 1.txt
111
222
ccc
111
222
333

awk 命令

awk是一種編程語言,用於在linux/unix下對文本和數據進行處理。數據能夠來自標準輸入(stdin)、一個或多個文件,或其它命令的輸出。它支持用戶自定義函數和動態正則表達式等先進功能,是linux/unix下的一個強大編程工具。它在命令行中使用,但更可能是做爲腳原本使用。awk有不少內建的功能,好比數組、函數等,這是它和C語言的相同之處,靈活性是awk最大的優點。正則表達式

  • -F: 指定輸入的分隔符

awk -F ':' '{print $1}' test.txt 使用awk 命令 打印第一段以冒號分隔的文件。

[root@aminglinux ~]# mkdir awk
[root@aminglinux ~]# cp /etc/passwd ./awk/test.txt
[root@aminglinux ~]# cd awk/
[root@aminglinux awk]# ls
test.txt
[root@aminglinux awk]# awk -F ':' '{print $1}' test.txt root
bin
daemon
adm
lp
sync
shutdown
·····

awk -F ':' '{print $0}' test.txt 使用awk 命令打印文件的全部內容。

awk -F ':' '{print $1"#"$2"#"$3"#"$4}' test.txt 將文件中以冒號分隔的字符替換成以#分隔。

[root@aminglinux awk]# awk -F ':' '{print $1"#"$2"#"$3}' test.txt 
root#x#0
bin#x#1
daemon#x#2
adm#x#3
lp#x#4
sync#x#5
shutdown#x#6
······

awk '/oo/' test.txt 在test.txt 文件匹配 oo 的文件。

[root@aminglinux awk]# awk '/oo/' test.txt 
root:x:0:0:root:/root:/bin/bash
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
setroubleshoot:x:993:990::/var/lib/setroubleshoot:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin

awk -F ':' '$1 ~ /oo/' test.txt test.txt 文件中匹配oo 而且打印第一段。

[root@aminglinux awk]# awk -F ':' '$1 ~ /oo/' test.txt 
root:x:0:0:root:/root:/bin/bash
setroubleshoot:x:993:990::/var/lib/setroubleshoot:/sbin/nologin

在test.txt 文件中 既匹配root或者匹配 usrer 的字符 而且打印 第一段和第三段。awk -F ':' '/root/ {print $1,$3}' /user/ {print $1,$3}' test.txt 等於 awk -F ':' '/root|user/ {print $1,$3}' test.txt

[root@aminglinux awk]# awk -F ":" '/root/ {print $1,$3} /user/ {print $1,$3}' test.txt 
root 0
operator 11
saslauth 996
qemu 107
tss 59
usbmuxd 113
rpcuser 29
radvd 75
——————————————————————————————————————————————
[root@aminglinux awk]# awk -F ':' '/root|user/ {print $1,$3}' test.txt 
root 0
operator 11
saslauth 996
qemu 107
tss 59
usbmuxd 113
rpcuser 29
radvd 75

[root@aminglinux awk]# grep -E  'root|user' test.txt 
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
saslauth:x:996:76:Saslauthd user:/run/saslauthd:/sbin/nologin
qemu:x:107:107:qemu user:/:/sbin/nologin
tss:x:59:59:Account used by the trousers package to sandbox the tcsd daemon:/dev/null:/sbin/nologin
usbmuxd:x:113:113:usbmuxd user:/:/sbin/nologin
rpcuser:x:29:29:RPC Service User:/var/lib/nfs:/sbin/nologin
radvd:x:75:75:radvd user:/:/sbin/nologin

awk -F ':' '$3=="0"' test.txt 打印出test.txt文件中第三行字符爲0

[root@aminglinux awk]# awk -F ':' '$3=="0"' test.txt 
root:x:0:0:root:/root:/bin/bash

awk -F ':' '$3>="500"' test.txt 500 加上雙引號表示500 爲字符串 不加雙引號 表示數值。

[root@aminglinux awk]# awk -F ':' '$3>="500"' test.txt 
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
————————————————————————————————————

[root@aminglinux awk]# awk -F ':' '$3>=500' test.txt 
polkitd:x:999:998:User for polkitd:/:/sbin/nologin
libstoragemgmt:x:998:997:daemon account for libstoragemgmt:/var/run/lsm:/sbin/nologin
colord:x:997:996:User for colord:/var/lib/colord:/sbin/nologin
saslauth:x:996:76:Saslauthd user:/run/saslauthd:/sbin/nologin

匹配出文中不等於 /sbin/nologin的行 awk -F ':' '$7!="/sbin/nologin"' test.txt

[root@aminglinux awk]# awk -F ':' '$7!="/sbin/nologin"' test.txt 
root:x:0:0:root:/root:/bin/bash
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
centos7com:x:1000:1000:centos7.com:/home/centos7com:/bin/bash

匹配test.txt第三段小於第四段的 awk -F ":" '$3<$4' test.txt

[root@aminglinux awk]# awk -F ":" '$3<$4' test.txt 
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin

匹配test.tzt 文件中 第三段的數值大於5而且小於7的awk -F ":" '$3>5 && $3 < 7' test.txt

[root@aminglinux awk]# awk -F ':' '$3>5 && $3<7' test.txt 
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown

匹配test.txt 文件中 第三段數值大於1000 或者第七段字符爲 /bin/bash

[root@aminglinux awk]# awk -F ":" '$3>1000 || $7=="/bin/bash"' test.txt 
root:x:0:0:root:/root:/bin/bash
nfsnobody:x:65534:65534:Anonymous NFS User:/var/lib/nfs:/sbin/nologin
centos7com:x:1000:1000:centos7.com:/home/centos7com:/bin/bash

test.txt第三段大於1000 或者第七段包含 /bash/ 字符的

[root@aminglinux awk]# awk -F ":" '$3>1000 || $7 ~ /bash/' test.txt 
root:x:0:0:root:/root:/bin/bash
nfsnobody:x:65534:65534:Anonymous NFS User:/var/lib/nfs:/sbin/nologin
centos7com:x:1000:1000:centos7.com:/home/centos7com:/bin/bash

-F 指定分段前的分隔符 | OFS 指定print 後的分隔符

test.txt 文件中匹配 第三段 等於1000 而且使用#分隔第一段第二段第三段

[root@aminglinux awk]# awk -F ":" '{OFS="#"} $3==1000 {print $1,$2,$3}' test.txt 
centos7com#x#1000
——————————————————————————————————————————
[root@aminglinux awk]# awk -F ":" '{OFS="#"} {if ($3==1000) {print $1,$2,$3}}' test.txt 
centos7com#x#1000

NR 表示行 NF 表示段

打印顯示多少行,顯示出行號

[root@aminglinux awk]# awk -F ":" '{print NR":"$1,$2}' t
est.txt 
1:root x
2:bin x
3:daemon x
4:adm x
5:lp x
6:sync x
7:shutdown x
8:halt x
9:mail x
10:operator x
11:games x
12:ftp x
13:nobody x
14:systemd-network x
15:dbus x
16:polkitd x
17:abrt x
18:libstoragemgmt x
19:rpc x
20:colord x
21:saslauth x
22:rtkit x
23:chrony x
24:qemu x
25:tss x
26:usbmuxd x
27:geoclue x
28:rpcuser x
29:nfsnobody x
30:radvd x
31:setroubleshoot x
32:pulse x
33:gdm x
34:gnome-initial-setup x
35:sshd x
36:avahi x
37:postfix x
38:ntp x
39:tcpdump x
40:centos7com x

NF 顯示文件中有多少段而且打印第一段

[root@aminglinux awk]# awk -F ":" '{print NF ":" $1}' test.txt 
7:root
7:bin
7:daemon
7:adm
7:lp
7:sync
7:shutdown
7:halt
7:mail
7:operator
7:games
7:ftp
7:nobody
7:systemd-network
7:dbus
7:polkitd
7:abrt
7:libstoragemgmt
7:rpc
7:colord
7:saslauth
7:rtkit
7:chrony
7:qemu
7:tss
7:usbmuxd
7:geoclue
7:rpcuser
7:nfsnobody
7:radvd
7:setroubleshoot
7:pulse
7:gdm
7:gnome-initial-setup
7:sshd
7:avahi
7:postfix
7:ntp
7:tcpdump
7:centos7com

NR 和 NF 能夠做爲判斷條件

打印前10行編程

[root@aminglinux awk]# awk -F ":" 'NR<=10' test.txt 
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin

還能夠添加附屬條件 打印前10行中第一段包含root或者sync的c#

[root@aminglinux awk]# awk -F ":" 'NR<=10 && $1 ~ /root|sync/' test.txt 
root:x:0:0:root:/root:/bin/bash
sync:x:5:0:sync:/sbin:/bin/sync

使用awk 將 文件test.txt 第三段的數值相加

[root@aminglinux awk]# 
[root@aminglinux awk]# awk -F ":" '{(tot=tot+$3)}; END {print tot}' test.txt 
76259
相關文章
相關標籤/搜索