-c 行數php
-i 不區分大小寫html
-n 顯示行號java
-v 取反linux
-r 遍歷全部子目錄正則表達式
-A 後面跟數字,過濾出符合要求的行以及下面n行shell
-B 同上,過濾出符合要求的行以及上面n行編程
-C 同上,同時過濾出符合要求的行以及上下各n行。數組
[root@localhost ~]# mkdir grep [root@localhost ~]# cd grep/ [root@localhost grep]# cp /etc/passwd . [root@localhost grep]# ls passwd [root@localhost grep]# pwd /root/grep [root@localhost grep]# ls passwd [root@localhost grep]# grep 'nologin' passwd 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-bus-proxy:x:999:997:systemd Bus Proxy:/:/sbin/nologin systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin dbus:x:81:81:System message bus:/:/sbin/nologin polkitd:x:998:996:User for polkitd:/:/sbin/nologin tss:x:59:59:Account used by the trousers package to sandbox the tcsd daemon:/dev/null:/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:997:995::/var/lib/chrony:/sbin/nologin [root@localhost grep]#
[root@localhost grep]# grep -c 'nologin' passwd 17 [root@localhost grep]#
[root@localhost grep]# grep -n 'nologin' passwd 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-bus-proxy:x:999:997:systemd Bus Proxy:/:/sbin/nologin 15:systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin 16:dbus:x:81:81:System message bus:/:/sbin/nologin 17:polkitd:x:998:996:User for polkitd:/:/sbin/nologin 18:tss:x:59:59:Account used by the trousers package to sandbox the tcsd daemon:/dev/null:/sbin/nologin 19:postfix:x:89:89::/var/spool/postfix:/sbin/nologin 20:sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin 21:chrony:x:997:995::/var/lib/chrony:/sbin/nologin [root@localhost grep]#
[root@localhost grep]# grep -v 'nologin' passwd 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 user1:x:1000:1007::/home/user1:/bin/bash user2:x:1001:1008::/home/user2:/bin/bash user3:x:1005:1000::/home/user3:/bin/bash [root@localhost grep]#
[root@localhost grep]# grep -r 'root' /etc/ /etc/pki/ca-trust/ca-legacy.conf:# The upstream Mozilla.org project tests all changes to the root CA /etc/pki/ca-trust/ca-legacy.conf:# to temporarily keep certain (legacy) root CA certificates trusted, /etc/pki/ca-trust/ca-legacy.conf:# It may keep root CA certificate as trusted, which the upstream /etc/pki/ca-trust/extracted/README:root CA certificates. /etc/pki/ca-trust/extracted/java/README:root CA certificates. 匹配到二進制文件 /etc/pki/ca-trust/extracted/java/cacerts /etc/pki/ca-trust/extracted/openssl/README:root CA certificates. /etc/pki/ca-trust/extracted/pem/README:root CA certificates. /etc/pki/tls/certs/make-dummy-cert: echo root@localhost.localdomain /etc/pki/tls/openssl.cnf:dir = ./demoCA # TSA root directory /etc/rpm/macros.perl:%define perl_br_testdir %{buildroot}%{perl_testdir}/%{cpan_dist_name} \
[root@localhost grep]# grep -nA2 'root' passwd 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 [root@localhost grep]#
[root@localhost grep]# grep -nB2 'root' passwd 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 [root@localhost grep]#
[root@localhost grep]# grep -nC2 'root' passwd 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
過濾出全部包含數字的行。[]裏面表示任意一個字符。bash
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-bus-proxy:x:999:997:systemd Bus Proxy:/:/sbin/nologin systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin dbus:x:81:81:System message bus:/:/sbin/nologin polkitd:x:998:996:User for polkitd:/:/sbin/nologin tss:x:59:59:Account used by the trousers package to sandbox the tcsd daemon:/dev/null:/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:997:995::/var/lib/chrony:/sbin/nologin user1:x:1000:1007::/home/user1:/bin/bash user2:x:1001:1008::/home/user2:/bin/bash user3:x:1005:1000::/home/user3:/bin/bash
若是加了-v ,意思是過濾出除了帶數字的行,以下結果是沒有這樣的行dom
[root@localhost ~]# grep -v '[0-9]' /etc/passwd [root@localhost ~]#
[root@localhost ~]# grep -n '^#' /etc/inittab 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 14:# 15:# To set a default target, run: 16:# systemctl set-default TARGET.target 17:# [root@localhost ~]# grep -nv '^#' /etc/inittab [root@localhost ~]#
[]裏面的內容是非的意思,上面的就是過濾列出一個非0-9開頭的行。
r.o的.的意思是表明全部字符。
[root@localhost grep]# vi passwd [root@localhost grep]# grep -n 'r.o' passwd 1:root:x:0:0:root:/root:/bin/bash 3:fsfh:23:rao:fsdfafsaf:fffas 11:fdsafa:r>o:ksldjflkasdjfla:qe112312 12:operator:x:11:0:operator:/root:/sbin/nologin [root@localhost grep]#
'o*o' * 號左側的字符的n個相同字符。
[root@localhost grep]# grep -n 'o*o' passwd 1:root:x:0:0:root:/root:/bin/bash 2:bin:x:1:1:bin:/bin:/sbin/nologin 3:fsfh:23:rao:fsdfafsaf:fffas 4:daemon:x:2:2:daemon:/sbin:/sbin/nologin 5:adm:x:3:4:adm:/var/adm:/sbin/nologin 6:lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin 8:shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown 10:mail:x:8:12:mail:/var/spool/mail:/sbin/nologin 11:fdsafa:r>o:ksldjflkasdjfla:qe112312 12:operator:x:11:0:operator:/root:/sbin/nologin 13:games:x:12:100:games:/usr/games:/sbin/nologin 14:ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin 15:nobody:x:99:99:Nobody:/:/sbin/nologin 16:systemd-bus-proxy:x:999:997:systemd Bus Proxy:/:/sbin/nologin 17:systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin 18:dbus:x:81:81:System message bus:/:/sbin/nologin 19:polkitd:x:998:996:User for polkitd:/:/sbin/nologin 20:tss:x:59:59:Account used by the trousers package to sandbox the tcsd daemon:/dev/null:/sbin/nologin 21:postfix:x:89:89::/var/spool/postfix:/sbin/nologin 22:sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin 23:chrony:x:997:995::/var/lib/chrony:/sbin/nologin 24:user1:x:1000:1007::/hooome/user1:/bin/bash 25:user2:x:1001:1008::/hoooome/user2:/bin/bash 26:user3:x:1005:1000::/hoome/user3:/bin/bash [root@localhost grep]#
[root@localhost grep]# grep 'o{2}' passwd [root@localhost grep]# grep 'o\{2\}' passwd 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 user1:x:1000:1007::/hooome/user1:/bin/bash user2:x:1001:1008::/hoooome/user2:/bin/bash user3:x:1005:1000::/hoome/user3:/bin/bash [root@localhost grep]#
[root@localhost grep]# egrep 'o{2}' passwd 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 user1:x:1000:1007::/hooome/user1:/bin/bash user2:x:1001:1008::/hoooome/user2:/bin/bash user3:x:1005:1000::/hoome/user3:/bin/bash [root@localhost grep]# grep -E 'o{2}' passwd 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 user1:x:1000:1007::/hooome/user1:/bin/bash user2:x:1001:1008::/hoooome/user2:/bin/bash user3:x:1005:1000::/hoome/user3:/bin/bash
與 * 意思差很少, + 也是過濾 + 號前面字符的n次。可是次數時大於等於1的,必須出現一次或以及以上,下面的o至少是兩個在一塊兒的。和 * 不一樣, * 能夠出現0次。
[root@localhost grep]# grep -n 'o+o' passwd [root@localhost grep]# grep -n 'o\+o' passwd 1:root:x:0:0:root:/root:/bin/bash 6:lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin 10:mail:x:8:12:mail:/var/spool/mail:/sbin/nologin 12:operator:x:11:0:operator:/root:/sbin/nologin 21:postfix:x:89:89::/var/spool/postfix:/sbin/nologin 24:user1:x:1000:1007::/hooome/user1:/bin/bash 25:user2:x:1001:1008::/hoooome/user2:/bin/bash 26:user3:x:1005:1000::/hoome/user3:/bin/bash [root@localhost grep]# egrep -n 'o+o' passwd 1:root:x:0:0:root:/root:/bin/bash 6:lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin 10:mail:x:8:12:mail:/var/spool/mail:/sbin/nologin 12:operator:x:11:0:operator:/root:/sbin/nologin 21:postfix:x:89:89::/var/spool/postfix:/sbin/nologin 24:user1:x:1000:1007::/hooome/user1:/bin/bash 25:user2:x:1001:1008::/hoooome/user2:/bin/bash 26:user3:x:1005:1000::/hoome/user3:/bin/bash [root@localhost grep]#
[root@localhost grep]# egrep -n 'o+t' passwd 1:root:x:0:0:root:/root:/bin/bash 12:operator:x:11:0:operator:/root:/sbin/nologin [root@localhost grep]# egrep -n 'o+b' passwd 15:nobody:x:99:99:Nobody:/:/sbin/nologin [root@localhost grep]#
? 的意思是?號左側字符出現0或者1次,要麼有要麼沒有。在linux系統中會有紅色高亮顯示
[root@localhost grep]# egrep -n 'o?t' passwd 1:root:x:0:0:root:/root:/bin/bash 8:shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown 9:halt:x:7:0:halt:/sbin:/sbin/halt 12:operator:x:11:0:operator:/root:/sbin/nologin 14:ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin 16:systemd-bus-proxy:x:999:997:systemd Bus Proxy:/:/sbin/nologin 17:systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin 18:dbus:x:81:81:System message bus:/:/sbin/nologin 19:polkitd:x:998:996:User for polkitd:/:/sbin/nologin 20:tss:x:59:59:Account used by the trousers package to sandbox the tcsd daemon:/dev/null:/sbin/nologin 21:postfix:x:89:89::/var/spool/postfix:/sbin/nologin 22:sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin [root@localhost grep]#
| 或者的意思
[root@localhost grep]# egrep 'root|nologin' passwd 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 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-bus-proxy:x:999:997:systemd Bus Proxy:/:/sbin/nologin systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin dbus:x:81:81:System message bus:/:/sbin/nologin polkitd:x:998:996:User for polkitd:/:/sbin/nologin tss:x:59:59:Account used by the trousers package to sandbox the tcsd daemon:/dev/null:/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:997:995::/var/lib/chrony:/sbin/nologin [root@localhost grep]#
把一個目錄下,過濾全部*.php文檔中含有eval的行
grep -r --include="*.php" 'eval' /data/
sed -n '/root/'p test.txt
[root@localhost sed]# sed -n '/root/'p test.txt root:x:0:0:root:/root:/bin/bash operator:x:11:0:operator:/root:/sbin/nologin [root@localhost sed]#
同時也支持. *等用法 sed -n '/r.t/'p test.txt
[root@localhost sed]# sed -n '/r.t/'p test.txt operator:x:11:0:operator:/root:/sbin/nologin sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
sed -n '/r*t/'p test.tx
[root@localhost sed]# sed -n '/r*t/'p test.txt root:x:0:0:root:/root:/bin/bash shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown halt:x:7:0:halt:/sbin:/sbin/halt operator:x:11:0:operator:/root:/sbin/nologin ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin systemd-bus-proxy:x:999:997:systemd Bus Proxy:/:/sbin/nologin systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin dbus:x:81:81:System message bus:/:/sbin/nologin polkitd:x:998:996:User for polkitd:/:/sbin/nologin tss:x:59:59:Account used by the trousers package to sandbox the tcsd daemon:/dev/null:/sbin/nologin postfix:x:89:89::/var/spool/postfix:/sbin/nologin sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
sed -nr '/o+t/'p test.txt
-r選項相似 grep -E
[root@localhost sed]# sed -n '/o+t/'p test.txt [root@localhost sed]#
[root@aminglinux-01 awk]# sed -nr '/o+t/'p test.txt root:x:0:0:root:/root:/bin/bash operator:x:11:0:operator:/root:/sbin/nologin
[root@aminglinux-01 awk]# sed -n '2'p test.txt bin:x:1:1:bin:/bin:/sbin/nologin
[root@aminglinux-01 awk]# sed -n '2,5'p 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
[root@aminglinux-01 awk]# sed -e '1'p -e '/bus/'p -n test.txt root:x:0:0:root:/root:/bin/bash systemd-bus-proxy:x:999:997:systemd Bus Proxy:/:/sbin/nologin dbus:x:81:81:System message bus:/:/sbin/nologin
[root@localhost awk]# awk -F ':' '{print $1}' test.txt root bin daemon adm lp sync shutdown halt mail operator games ftp nobody systemd-bus-proxy systemd-network dbus polkitd tss postfix sshd chrony user1 user2 user3 [root@localhost awk]#
若是沒有指定分割符號,默認以空格或空白字符爲分割點
[root@localhost awk]# awk '{print $0}' 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-bus-proxy:x:999:997:systemd Bus Proxy:/:/sbin/nologin systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin dbus:x:81:81:System message bus:/:/sbin/nologin polkitd:x:998:996:User for polkitd:/:/sbin/nologin tss:x:59:59:Account used by the trousers package to sandbox the tcsd daemon:/dev/null:/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:997:995::/var/lib/chrony:/sbin/nologin user1:x:1000:1007::/home/user1:/bin/bash user2:x:1001:1008::/home/user2:/bin/bash user3:x:1005:1000::/home/user3:/bin/bash [root@localhost awk]#
[root@localhost awk]# awk -F ':' '{print $1,$3,$4}' test.txt root 0 0 bin 1 1 daemon 2 2 adm 3 4 lp 4 7 sync 5 0 shutdown 6 0 halt 7 0 mail 8 12 operator 11 0 games 12 100 ftp 14 50 nobody 99 99 systemd-bus-proxy 999 997 systemd-network 192 192 dbus 81 81 polkitd 998 996 tss 59 59 postfix 89 89 sshd 74 74 chrony 997 995 user1 1000 1007 user2 1001 1008 user3 1005 1000 [root@localhost awk]#
[root@localhost 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 postfix:x:89:89::/var/spool/postfix:/sbin/nologin [root@localhost awk]#
[root@localhost awk]# awk -F ':' '$1 ~ /oo/' test.txt root:x:0:0:root:/root:/bin/bash [root@localhost awk]#
[root@localhost awk]# awk -F ':' '$1 ~ /oo+/' test.txt root:x:0:0:root:/root:/bin/bash [root@localhost awk]# awk -F ':' '$1 ~ /o+/' test.txt root:x:0:0:root:/root:/bin/bash daemon:x:2:2:daemon:/sbin:/sbin/nologin shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown operator:x:11:0:operator:/root:/sbin/nologin nobody:x:99:99:Nobody:/:/sbin/nologin systemd-bus-proxy:x:999:997:systemd Bus Proxy:/:/sbin/nologin systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin polkitd:x:998:996:User for polkitd:/:/sbin/nologin postfix:x:89:89::/var/spool/postfix:/sbin/nologin chrony:x:997:995::/var/lib/chrony:/sbin/nologin [root@localhost awk]#
[root@localhost awk]# awk -F ':' '/root/ {print $1,$3} /user/ {print $1,$3,$4}' test.txt root 0 operator 11 tss 59 59 user1 1000 1007 user2 1001 1008 user3 1005 1000 [root@localhost awk]#
==兩個等於號是等於的意思,由於一個等於號會誤認爲是賦值
數值不能用雙引號
[root@localhost awk]# awk -F ':' '$3==0' test.txt root:x:0:0:root:/root:/bin/bash [root@localhost awk]# awk -F ':' '$3==0 {print $1}' test.txt root [root@localhost awk]# awk -F ':' '$3>=1000 {print $1}' test.txt user1 user2 user3 [root@localhost awk]# awk -F ':' '$3>=1000 {print $0}' test.txt user1:x:1000:1007::/home/user1:/bin/bash user2:x:1001:1008::/home/user2:/bin/bash user3:x:1005:1000::/home/user3:/bin/bash [root@localhost awk]#
不等於符號: !=
表示第7段沒有/sbin/nologin,字符串要用""雙引號
[root@localhost awk]# awk -F ':' '$7!="/sbin/nologin" {print $0}' 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 user1:x:1000:1007::/home/user1:/bin/bash user2:x:1001:1008::/home/user2:/bin/bash user3:x:1005:1000::/home/user3:/bin/bash [root@localhost awk]#
列出第三段小於第四段
[root@localhost 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 user1:x:1000:1007::/home/user1:/bin/bash user2:x:1001:1008::/home/user2:/bin/bash [root@localhost awk]#
列出第三段數值等於第四段
[root@localhost awk]# awk -F ':' '$3==$4' 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 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 tss:x:59:59:Account used by the trousers package to sandbox the tcsd daemon:/dev/null:/sbin/nologin postfix:x:89:89::/var/spool/postfix:/sbin/nologin sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin [root@localhost awk]#
列出第三段大於5小於7的字段
[root@localhost awk]# awk -F ':' '$3>"5" && $3<"7"' test.txt shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown tss:x:59:59:Account used by the trousers package to sandbox the tcsd daemon:/dev/null:/sbin/nologin
匹配第三段數值大於1000或者第七段是/sbin/nologin的內容
[root@localhost awk]# awk -F ':' '$3>1000 || $7=="/sbin/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-bus-proxy:x:999:997:systemd Bus Proxy:/:/sbin/nologin systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin dbus:x:81:81:System message bus:/:/sbin/nologin polkitd:x:998:996:User for polkitd:/:/sbin/nologin tss:x:59:59:Account used by the trousers package to sandbox the tcsd daemon:/dev/null:/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:997:995::/var/lib/chrony:/sbin/nologin user2:x:1001:1008::/home/user2:/bin/bash user3:x:1005:1000::/home/user3:/bin/bash [root@localhost awk]#
列出第三段大於1000或者第七段含有bash字段
[root@localhost awk]# awk -F ':' '$3>1000 || $7 ~ /bash/' test.txt root:x:0:0:root:/root:/bin/bash user1:x:1000:1007::/home/user1:/bin/bash user2:x:1001:1008::/home/user2:/bin/bash user3:x:1005:1000::/home/user3:/bin/bash [root@localhost awk]#
語法:{OFS=""} 條件 {打印內容}
[root@localhost awk]# awk -F ':' '{OFS="#"} $3>1000 || $7 ~ /bash/ {print $1,$3,$7} ' test.txt root#0#/bin/bash user1#1000#/bin/bash user2#1001#/bin/bash user3#1005#/bin/bash [root@localhost awk]#
[root@localhost awk]# awk -F ':' '{print NR":"$0}' 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 4:adm:x:3:4:adm:/var/adm:/sbin/nologin 5:lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin 6:sync:x:5:0:sync:/sbin:/bin/sync 7:shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown 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 13:nobody:x:99:99:Nobody:/:/sbin/nologin 14:systemd-bus-proxy:x:999:997:systemd Bus Proxy:/:/sbin/nologin 15:systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin 16:dbus:x:81:81:System message bus:/:/sbin/nologin 17:polkitd:x:998:996:User for polkitd:/:/sbin/nologin 18:tss:x:59:59:Account used by the trousers package to sandbox the tcsd daemon:/dev/null:/sbin/nologin 19:postfix:x:89:89::/var/spool/postfix:/sbin/nologin 20:sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin 21:chrony:x:997:995::/var/lib/chrony:/sbin/nologin 22:user1:x:1000:1007::/home/user1:/bin/bash 23:user2:x:1001:1008::/home/user2:/bin/bash 24:user3:x:1005:1000::/home/user3:/bin/bash [root@localhost awk]#
固然這裏面都是7段,若是刪除一個:,前面段數就變成了6
[root@localhost awk]# awk -F ':' '{print NF":"$0}' test.txt 7:root:x:0:0:root:/root:/bin/bash 7:bin:x:1:1:bin:/bin:/sbin/nologin 7:daemon:x:2:2:daemon:/sbin:/sbin/nologin 7:adm:x:3:4:adm:/var/adm:/sbin/nologin 7:lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin 7:sync:x:5:0:sync:/sbin:/bin/sync 7:shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown 7:halt:x:7:0:halt:/sbin:/sbin/halt 7:mail:x:8:12:mail:/var/spool/mail:/sbin/nologin 7:operator:x:11:0:operator:/root:/sbin/nologin 7:games:x:12:100:games:/usr/games:/sbin/nologin 7:ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin 7:nobody:x:99:99:Nobody:/:/sbin/nologin 7:systemd-bus-proxy:x:999:997:systemd Bus Proxy:/:/sbin/nologin 7:systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin 7:dbus:x:81:81:System message bus:/:/sbin/nologin 7:polkitd:x:998:996:User for polkitd:/:/sbin/nologin 7:tss:x:59:59:Account used by the trousers package to sandbox the tcsd daemon:/dev/null:/sbin/nologin 7:postfix:x:89:89::/var/spool/postfix:/sbin/nologin 7:sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin 7:chrony:x:997:995::/var/lib/chrony:/sbin/nologin 7:user1:x:1000:1007::/home/user1:/bin/bash 7:user2:x:1001:1008::/home/user2:/bin/bash 7:user3:x:1005:1000::/home/user3:/bin/bash [root@localhost awk]#
[root@localhost 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 [root@localhost awk]#
[root@localhost 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 [root@localhost awk]#
grep,awk,sed擴展習題
打印某行到某行之間的內容 http://ask.apelearn.com/question/559
sed在某一行最後添加一個數字 http://ask.apelearn.com/question/288
刪除某行到最後一行 http://ask.apelearn.com/question/213
打印1到100行含某個字符串的行 http://ask.apelearn.com/question/1048
awk 中使用外部shell變量 http://ask.apelearn.com/question/199
awk 合併一個文件 http://ask.apelearn.com/question/493
把一個文件多行鏈接成一行 http://ask.apelearn.com/question/266
awk中gsub函數的使用 http://ask.apelearn.com/question/200
awk 截取指定多個域爲一行 http://ask.apelearn.com/question/224
過濾兩個或多個關鍵詞 http://ask.apelearn.com/question/198
用awk生成如下結構文件 http://ask.apelearn.com/question/5494
awk用print打印單引號 http://ask.apelearn.com/question/1738
例如:有個文件test的內容以下:
ert fff ** [abcfd] 123 324 444 [rty] ** fgfgf
怎麼能截取
[abcfd] 123 324 444 [rty]
這一部分出來呢?
答案: sed -n '/[abcfd]/,/[rty]/p' test
sed中,使用\u表示大寫,\l表示小寫
sed 's/\b[a-z]/\u&/g' filename
sed 's/[a-z]/\u&/g' filename
sed 's/[A-Z]/\l&/g' filename
cat test askdj aslkd aslkdjf3e skdjfsdfj sdkfjk fsdkfjksdjfkjsdf 12sdfesdf aslkdjfkasdjf asdlfkjaskdfj
sed 's/\(^a.*\)/\1 12/' test askdj 12 aslkd aslkdjf3e 12 skdjfsdfj sdkfjk fsdkfjksdjfkjsdf 12sdfesdf aslkdjfkasdjf asdlfkjaskdfj 12
[root@test200 ~]# cat test a b c d e f [root@test200 ~]# sed '/c/{p;:a;N;$!ba;d}' test a b c
sed -n '1,100{/abc/p}' 1.txt
如: A=44echo "ABCD" | awk -v GET_A=$A ’{print GET_A}’ 說明:-v選項用於定義參數,這裏表示將變量A的值賦予GET_A。 有多少個變量須要賦值,就須要多少個-v選項。與之等價的:應用於腳本中: #! /bin/bash sort -n filename |awk -F ':' '{print $1}'|uniq >id.txt for id in `cat id.txt`; do echo "[$id]" awk -v id2=$id -F ':' '$1==id2 {print $2}' filename // 另外的方式爲: awk -F ':' '$1=="'id'" {print $2}' filename done 附件: cat filename 1111111:13443253456 2222222:13211222122 1111111:13643543544 3333333:12341243123 2222222:12123123123 運行腳本後結果爲: [1111111] 13443253456 13643543544 [2222222] 13211222122 12123123123 [3333333] 12341243123
我有這樣的需求,須要把兩個文件中,第一列相同的行合併到同一行中。舉個例子,有兩個文件,內容以下 cat 1.txt 1 aa 2 bb 3 ee 4 ss cat 2.txt 1 ab 2 cd 3 ad 4 bd 5 de 合併後的結果爲: 1 ab aa 2 cd bb 3 ad ee 4 bd ss 5 de 實現的命令爲: awk 'NR==FNR{a[$1]=$2}NR>FNR{print $0,a[$1]}' 1.txt 2.txt 解釋:NR表示讀取的行數,FNR表示讀取的當前行數 因此其實NR==FNR 就表示讀取2.txt的時候。 同理NR>FNR表示讀取1.txt的時候 數組a其實就至關於一個map
應用舉例:一個文件每行都有一個數字,如今須要把每行的數字用「+」鏈接起來。 cat a 96 1093 1855 1253 1364 1332 2308 2589 2531 1239 2164 2826 2787 2145 2617 4311 1810 2115 1235 awk '{printf ("%s+",$0)}' a; echo "" 96+1093+1855+1253+1364+1332+2308+2589+2531+1239+2164+2826+2787+2145+2617+4311+1810+2115+1235+ 這裏注意,最後一個是帶「+」的。echo "" 的做用是換行。 另外的方法是 cat a|xargs|sed 's/ /+/g' 96+1093+1855+1253+1364+1332+2308+2589+2531+1239+2164+2826+2787+2145+2617+4311+1810+2115+1235
awk 'gsub(/www/,"abc")' /etc/passwd // passwd文件中把全部www替換爲abc awk -F ':' 'gsub(/www/,"abc",$1) {print $0}' /etc/passwd // 替換$1中的www爲abc awk 'sub(/www/,"abc")' /etc/passwd // passwd文件中把第一次出現的www替換爲abc
for j in `seq 0 20`; do let x=100*$j let y=$x+1 let z=$x+100 for i in `seq $y $z` ; do awk -v a=$i '{printf $a " "}' example.txt >>/tmp/test.txt echo " " >>/tmp/test.txt done done
grep -E '123|abc' filename // 找出文件(filename)中包含123或者包含abc的行 egrep '123|abc' filename //用egrep一樣能夠實現 awk '/123|abc/' filename // awk 的實現方式
awk '{print "This is a '"'"'"$1} filename 解釋一下:在awk中使用脫義字符\是起不到做用的,若是想打印特殊字符,只能使用'""' 這樣的組合才能夠。 這裏自左至右爲單引號 雙引號 雙引號 單引號其中兩個單引號爲一對,兩個雙引號爲一對。想脫義$那就是'"$"' 脫義單引號那就是 '"'"'
paste filename1 filename2 這樣就能夠實現了。舉個例子。 cat a.txt 1 2 3 4 5 6 a b c cat b.txt 3 2 1 6 5 4 c b a 則 paste a.txt b.txt 結果爲 1 2 3 3 2 1 4 5 6 6 5 4 a b c c b a 若是,你想在兩個文件鏈接處用一個指定的字符鏈接,還能夠用-d來指定 paste -d '+' a.txt b.txt 結果爲 1 2 3+3 2 1 4 5 6+6 5 4 a b c+c b a