shall 正则表达式

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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值