grep 查索 格式: grep -c/-i/-n/-v/-A/-B/-C ‘查找的字符串’ 详细路径
-c :表示打印符合要求的行数。
-i :表示忽略大小写。
-n :输出符合要求的行数和行数
-v :打印不符合的行数
-A :A后面加数字(n) ,表示打印符合要求的及以下的n行。
-B :B加数字(n),表示打印符合要求的及以上n行.
0000002
-C :C加数字(n),表示打印符合的上下各n行。
[root@elk ~]05:08:50 # grep -C2 'halt' /etc/passwd
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@elk ~]17:49:21 # grep -nv 'nolgin' /etc/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
4:adm:x:3:4:adm:/var/adm:/sbin/nologin
5:lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
过滤出素所有带数字的行
[root@elk ~]17:50:00 # grep '[0-9]' /etc/inittab
# multi-user.target: analogous to runlevel 3
# graphical.target: analogous to runlevel 5
过滤掉所有带空格和#号的。^#去#号 ^$ 去空行
[root@elk ~]18:39:13 # cat .bashrc
# .bashrc
# User specific aliases and functions
alias rm='rm -i'
alias cp='cp -i'
alias mv='mv -i'
# Source global definitions
if [ -f /etc/bashrc ]; then
. /etc/bashrc
fi
export myname=Jinfu
[root@elk ~]18:37:12 # grep -v '^#' .bashrc |grep -v '^$'
alias rm='rm -i'
alias cp='cp -i'
alias mv='mv -i'
if [ -f /etc/bashrc ]; then
. /etc/bashrc
fi
过滤音文字,[ ]表示范围 [a-zA-Z ] 所有英文大小写 数字就是0-9 。
[15] 只含有1,5 。[^] 表示除括号内字符之外的字符。
[root@elk ~]22:45:06 # cat /tmp/cdpp
aaaaaa
ttpe
1234
678686
# uafdha
[root@elk ~]22:43:50 # grep '^[a-zA-Z]' /tmp/cdpp
aaaaaa
ttpe
[root@elk ~]22:44:40 # grep '^[^a-zA-Z]' /tmp/cdpp
1234
678686
# uafdha
[root@elk ~]22:44:49 # grep '[^a-zA-Z]' /tmp/cdpp
1234
678686
# uafdha
过滤出任意一个字符和重要字符。 (r.o)中 . 表示r和o 中间有任意字符
[root@elk ~]23:36:43 # grep 'r.o' /etc/passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
表示零个或多个前面的字符。( 有oo,ooo ,oooo)
[root@elk ~]23:39:27 # grep ooo* /etc/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
匹配所行数包括空行。
[root@elk ~]23:48:22 # grep '.*' /etc/passwd |wc -l
20
[root@elk ~]23:53:13 # wc -l /etc/passwd
20 /etc/passwd
[root@elk ~]23:53:37 # grep '.*' /etc/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
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:998:User for polkitd:/:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
ntp:x:38:38::/etc/ntp:/sbin/nologin
test:x:1000:1000::/home/test:/bin/bash
指定要过滤字符出现的次数。 { } 中的、不能少转义{} 表范围。{n1 ,n2} n1 < n2 。当n2 为空这是n1 < =n2
[root@elk ~]18:53:32 # grep 'o\{2\}' /etc/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
过滤出多个字符或指定字符。 egrep 可以使用 + 和 {} 不需要加转义字符
[root@elk ~]00:10:04 # egrep 'o+' /etc/passwd |wc -l
18
[root@elk ~]00:10:21 # egrep 'o+' /etc/passwd |wc -l
18
[root@elk ~]00:10:30 # egrep 'o{2}' /etc/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
过滤指定字符
[root@elk ~]00:17:17 # egrep 'o?' /etc/passwd |wc -l
20
[root@elk ~]00:17:41 # egrep 'ooo?' /etc/passwd |wc -l
5
[root@elk ~]00:18:07 # egrep 'oo?' /etc/passwd |wc -l
18
过滤字符串1或者字符串2
[root@elk ~]00:41:15 # egrep 'aaa|111|o' /tmp/test
aaaaaaaaaa
11111111111111111
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
egrep 中 ()的应用 。( ) 表示一个整体可过滤 roo 或 rato 。() 可以和其他字符连在一起,例如(oo)+ 表示1个或多个oo
[root@elk ~]00:43:34 # egrep 'r(oo|at)o' /tmp/test
operator:x:11:0:operator:/root:/sbin/nologin
[root@elk ~]00:44:04 # egrep 'r(o|at)o' /tmp/test
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
sed 打印某行 。 格式 sed -n 'n’p 具体路径 ,n可以使一个数字,也可是范围 ,想打印所有行。 ’ 1,$‘
[root@elk ~]01:08:59 # sed -n '4'p /etc/passwd
adm:x:3:4:adm:/var/adm:/sbin/nologin
[root@elk ~]01:09:34 # sed -n '1,4'p /etc/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
打印某个字符串的行
[root@elk ~]01:08:59 # sed -n '4'p /etc/passwd
adm:x:3:4:adm:/var/adm:/sbin/nologin
[root@elk ~]01:09:34 # sed -n '1,4'p /etc/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
grep 中的其他特殊字符sed中也可以使用 ,^ ,$ ,* , .
[root@elk ~]01:14:04 # sed -n '/root/'p /tmp/test
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
[root@elk ~]01:19:37 # sed -n '/^1/'p /tmp/test
11111111111111111
[root@elk ~]01:20:10 # sed -n '/root/'p /tmp/test
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
[root@elk ~]01:21:03 # sed -n '/r.o/'p /tmp/test
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
[root@elk ~]01:26:39 # sed -n '/ro*/'p /tmp/test
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
sed 加上 e 可以实现多个行为,
[root@elk ~]01:21:15 # sed -e '1'p -e '/^111/'p -n /tmp/test
aaaaaaaaaa
11111111111111111
删除某些行,只在屏幕上删除。不会破坏文件
[root@elk ~]01:26:46 # sed '1'd /tmp/test
11111111111111111
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@elk ~]17:07:25 # sed '1,2'd /tmp/test
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@elk ~]17:07:56 # sed '1,3'd /tmp/test
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@elk ~]17:08:26 # sed '/oot/'d /tmp/test
aaaaaaaaaa
11111111111111111
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
替换字符或者字符串,s表示替换的动作、g表示本行全局替换,不加g 只替换本行出现的第一个 。
[root@elk ~]17:29:33 # sed '1,4s/11/to/g' /tmp/test
aaaaaaaaaa
totototototototo1
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@elk ~]17:41:28 # sed '1,3s#1#ot#g' /tmp/test
aaaaaaaaaa
ototototototototototototototototot
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
可以删除所有数字或字母
[root@elk ~]17:42:43 # sed 's/[1-9]//g' /tmp/test
aaaaaaaaaa
root:x:0:0:root:/root:/bin/bash
lp:x:::lp:/var/spool/lpd:/sbin/nologin
mail:x:::mail:/var/spool/mail:/sbin/nologin
operator:x::0:operator:/root:/sbin/nologin
postfix:x::::/var/spool/postfix:/sbin/nologin
[root@elk ~]17:45:25 # sed 's/[0-9A-Z]//g' /tmp/test
aaaaaaaaaa
root:x:::root:/root:/bin/bash
lp:x:::lp:/var/spool/lpd:/sbin/nologin
mail:x:::mail:/var/spool/mail:/sbin/nologin
operator:x:::operator:/root:/sbin/nologin
postfix:x::::/var/spool/postfix:/sbin/nologin
直接修改文件么内容
[root@elk ~]18:03:57 # sed -i 's/111/25/g' /tmp/test
[root@elk ~]18:06:32 # cat !$
cat /tmp/test
aaaaaaaaaa
252525252511
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
awk 工具
截取文档中的某一段 。F制定分割符。不加-F分隔符默认空格或tab 。print输入动作,$2 表示第二行
[root@elk ~]18:06:41 # head -n2 /tmp/test |awk -F ':' '{print $1}'
aaaaaaaaaa
252525252511
print 还可以打印自定义内容
[root@elk ~]19:06:44 # tail -2 /tmp/test |awk -F ':' '{print$1"#"$2"#"$3}'
operator#x#11
postfix#x#89
[root@elk ~]19:06:54 # cat /tmp/test
aaaaaaaaaa
252525252511
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@elk ~]19:07:24 #
匹配字符或字符串
[root@elk ~]19:07:24 # awk '/oo/' /tmp/test
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@elk ~]01:13:55 # awk -F ':' '$1 ~/oo/' /tmp/test
root:x:0:0:root:/root:/bin/bash
多次匹配,
[root@elk ~]01:24:28 # awk -F ':' '/oo/ {print $1,$3} /aaaa/ {print $1,$3}' /tmp/test
aaaaaaaaaa
root 0
lp 4
mail 8
operator 11
postfix 89
条件操作,awk 可以用逻辑符号进行判断,== 等于, < , <=, >, >= ,!= 。用双引号引起来数字相当于字符串
[root@elk ~]01:24:34 # awk -F ':' '$3=="0"' /tmp/test
root:x:0:0:root:/root:/bin/bash
比较数字
[root@elk ~]17:03:35 # awk -F ':' '$3>=300' /etc/passwd
polkitd:x:999:998:User for polkitd:/:/sbin/nologin
test:x:1000:1000::/home/test:/bin/bash
比较字符串
[root@elk ~]16:57:07 # awk -F ':' '$2>="300"' /etc/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
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:998:User for polkitd:/:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
ntp:x:38:38::/etc/ntp:/sbin/nologin
test:x:1000:1000::/home/test:/bin/bash
[root@elk ~]17:01:58 # awk -F ':' '$2>=300' /etc/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
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:998:User for polkitd:/:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
ntp:x:38:38::/etc/ntp:/sbin/nologin
test:x:1000:1000::/home/test:/bin/bash
!= ,不等于运算符。
[root@elk ~]17:04:11 # awk -F ':' '$7!="/sbin/nologin"' /etc/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
test:x:1000:1000::/home/test:/bin/bash
&& 和 || ”并且“和 ” 或者“
&&用法
[root@elk ~]17:27:46 # awk -F ':' '$3>"5" && $3<"7"' /etc/passwd
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
||用法
[root@elk ~]17:29:32 # awk -F ':' '$3>1000 || $7=="/bin/bash"' /etc/passwd
root:x:0:0:root:/root:/bin/bash
test:x:1000:1000::/home/test:/bin/bash
wak 的内置变量。 OFS,NF和NR ,
OFS和 -F类似 都是定义分割符的。但是他在输出时定义。 NF表示用分隔符分割的后一共有点多少段。 NR表示行号。
OFS
[root@elk ~]18:10:03 # head -4 /etc/passwd | awk -F ':' '{OFS="#"} {print $1,$2,$4}'
root#x#0
bin#x#1
daemon#x#2
adm#x#4
[root@elk ~]23:56:07 # awk -F ':' '{OFS="#"} {if ($3>100) {print $1,$2,$3,$4}}' /etc/passwd
systemd-network#x#192#192
polkitd#x#999#998
test#x#1000#1000
NF用法,用来看多少段
[root@elk ~]23:56:19 # head -n3 /etc/passwd |awk -F ':' '{print NF}'
7
7
7
NF 最后的值
[root@elk ~]00:03:06 # head -n3 /etc/passwd |awk -F ':' '{print $NF}'
/bin/bash
/sbin/nologin
/sbin/nologin
NR的用法。
[root@elk ~]01:10:13 # awk 'NR>=15' /etc/passwd
dbus:x:81:81:System message bus:/:/sbin/nologin
polkitd:x:999:998:User for polkitd:/:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
ntp:x:38:38::/etc/ntp:/sbin/nologin
test:x:1000:1000::/home/test:/bin/bash
[root@elk ~]01:11:07 # awk 'NR==15' /etc/passwd
dbus:x:81:81:System message bus:/:/sbin/nologin
NR 和匹配符一起使用。
[root@elk ~]01:11:22 # awk -F ':' 'NR<20 && $1 ~ /roo/' /etc/passwd
root:x:0:0:root:/root:/bin/bash
AWK 中的数学运算。
[root@elk ~]19:08:34 # head -n2 /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
[root@elk ~]19:08:26 # head -n2 /etc/passwd |awk -F ':' '{$7=$3+$4;print $0}'
root x 0 0 root /root 0
bin x 1 1 bin /bin 2
awk还可以计算某段的总和。 END是AWK特有的语法,表示每段都可以执行
[root@elk ~]19:09:27 # awk -F ':' '{(tot=tot+$3)}; END{print tot}' /etc/passwd
2645