企业高薪思维:
1.学习去抓重点有价值知识
2.猛劲学,使劲学(能否给别人将会,讲明白,写明白,练习明白),在学习过程中你觉得学会了60-80%,其实你只会了40-50%,你要讲明白会操作,类似于1+1=2顺口成章一种记忆,面试中你给HR的感觉,和身边同类人专业度是不一样的!
为什么要有爱好?
1.横向交往不同【层次】人脉。
你认识多少没有什么用,有多少人认识你才是你的价值。
2.释放工作、生活、学习带来的各种压力。
3.认识你的另一半,有相同爱好两个人。
为什么要有特长?
1.带给人自信。
自信是成功的前提。
2.横向交往不同【层次】人脉。
把和你的特长有相同爱好的人成为你的粉丝。
3.让你失败的时候能够东山再起。
企业常用Linux正则表达与三剑客知识
正则表达
处理大量字符串文本定义的一套规则与方法
Linux三剑客正则表达式特点
- 工作上,一次处理一行
- 正则表达式可以将复杂的任务处理为简单的,提高操作Linux效率
- 仅被三剑客(grep/egrep,sed,awk)命令支持
正则表达式:为过滤特殊字符串而生
正则表达式与通配符有本质去别的:
通配符:所有的命令支持
正则表达式只支持三剑客
在centos6 之前是没有这一种标记的,centos7开始官方加上了这个标记(alias egrep=’egrep --color=auto‘)
LC_ALL环境变量设置
我们以后在工作中/安装好虚拟机,安装对应的yum/epel/网络工具时候,后面也可以进行配置LC_ALL(三剑客环境变量配置)
建议配置:配置后操作时不会出现异常匹配情况(export LC_ALL=C)
在命令行输入:
vim etc/profile编辑输入:
export LC_ALL=C并保存
. /etc/profile运行文件
echo $LC_ALL是否有C显示,有就是成功,否则重新来一遍配置操作
第二种处理方式:
EOF后面不要用多余的空格:
cat >>/etc/profile<<EOF
alias grep=‘grep --color=auto’
alias egrep=‘egrep --color=auto’
export LCALL=C
注意:eof前后都没有空格和其他符号
EOF
使用修改的内容生效
source /etc/profile
正则表达式的分类
基本正则表达式:
BRE对应的元字符:^$.[]*
扩展正则表达式:
ERE在BRE基础上增加了(){}?+|
基础正则表达式
实验环境:
mkdir ~/test -p
cat >~/test/wulin.txt<<EOF
i am wulin!
i study linux.
i like playgames ,and chinese chess!
my qq num is 99999999.
not 6763873677
EOF
给过滤的内容添加标识,把符合的标识内容过滤
^ 尖角号,^wulin,表示匹配以wulin为单词开头的行
$ 美元符,wulin$,表示匹配以wulin单词结尾的行
^ $组合符,表示空行(以 结尾的行)或者以 开头的行
. 点号,匹配任意的一个且只有一个字符
\转义符,特殊含义的字符让本有的含义显出原形(不受别的含义干扰)
(*) 重复前一个字符(来纳许0次或1次以上,当为0次的时候,表示什么也没有)
(0 * )所有的都出来了:
(. * )匹配所有的内容
(^. *) 匹配任意多个字符结尾的内容
( . *$)任意多个字符结尾的内容
[abc]匹配[]集合内的任意一个字符a,b,c;
([abc]匹配不包含 后面的任意字符a,b,c
,这里的^表示对[a,b,c]的取反,不能用!进行替代
测试题
1.过滤/etc/passwd中以nologin结尾的行
2.过滤/etc/passwd中以o开头的行
3.过滤/etc/passwd中至少含有1个0字符串的行
4.过滤/etc/目录中(不含子目录)下的所有文件
5.过滤/etc/services中含有点号的行
扩展正则
条件:grep -E====egrep
(+)匹配前一个字符1次或多次
与区别,可以匹配0次
匹配0个0,或1个0,或多个0
[root@calms test3]# grep "0" wulin.txt
匹配一个0或多个0
[root@calms test3]# grep “0*” wulin.txt
[ : /]+ 匹配括号内的:或/字符1次或多次
egrep “[: /]+” wulin.txt
egrep -o 参数把匹配的内容放在一列进行打印
?匹配前一个字符0次或1次
| 表示或者,同时过滤多个字符串
egrep “000|wulin” wulin.txt
0 分组过滤括起来的东西表示一个整体,另外0的内容可以被后面的\n进行引用,n为数字,表示引用第几个括号的内容
\n 引用前面()括号内的内容
a{n,m}匹配前一个字符最少n次,最多m次
a{n,}匹配前一个字符最少n次
a{n} 匹配前一个字符正好n次
a{,m}匹配前一个字符最多m次
特殊预定义表达式(了解)
[root@calms test]# egrep “[[:alnum:]]” wulin.txt
I am wulin!
I study linux.
I like playgames,chinese chess!
our site is http://www.wulincsdn.com
qq num is 99999999.
not 4900000448.
i am not wulin,but WULINS!
:d::f
etc/wulin//
[root@wulin test]# egrep “[[:alpha:]]” wulin.txt
I am wulin!
I study linux.
I like playgames,chinese chess!
our site is http://www.wulincsdn.com
qq num is 99999999.
not 4900000448.
i am not wulin,but WULINS!
:d::f
/etc/wulin//
[root@wulin test]# egrep “[:digit:]” wulin.txt
grep: character class syntax is [[:space:]], not [:space:]
[root@wulintest]# egrep “[[:digit:]]” wulin.txt
qq num is 99999999.
not 4900000448.
A after 显示过滤的字符串和它之后的多少行
-B before 显示过滤的字符串和它之前的多少行
-C context 显示过滤的字符串和它之前之后的多少行
[root@wulin test]# grep -A 3 5 b.txt
5
6
7
8
[root@wulin test]# grep -B 3 5 b.txt
2
3
4
5
[root@wulin test]# grep -C 3 5 b.txt
2
3
4
5
6
7
8
元字符表达式(了解)
Sed流编辑器(Linux三剑客老二)
对文件实现快速增删改查,查询最强大的是取行与替换
取行和替换
sed [选项] [sed内置命令字符] [输入文件]
options[选项] 解释说明
- -n取消默认的sed输出,常与sed内置命令的p连用
- -i 直接修改文件的内容,而不是输出到终端 如果不使用-i选项sed只是修改在内存中的数据,并不会影响磁盘上的文件
修改前备份,修改后检查(在备份的时候,cp –i.bak做替换的时候用bak作为扩展名,先备份完在进行做替换)
修改文件并备份:
cp wulin.txt{,.ori}
ls
sed ‘/wulin/d’ wulin.txt
wulun.tsed -i.bak '/wulin/d’wulin.txt(修改源文件前备份)
ls
怎么看改没改成功?
〉Windows专业比较工具bcompare
vimdiff(查看2个文件差异,更直观)
vimdiff wulin.txt wulin.txt.bak(wulin.txt为修改的文件,wulin.txt.bak为源文件)
操作后左右两边有对比功能,红色为修改过的内容
diff查看2个文件差异
diff wulin.txt wulin.txt.bak
- -e 允许多次编辑
- –r 支持扩展正则表达式
p 全拼为print,表示打印
d delete 删除(在文件中删除内容)
问题:删除含有wulin字符串的行
sed -n ‘/wulin/d’ wulin.txt’
问题:2-4行删除
删除前查看
sed '2,4p’wulin.txt
sed '2,4d’wulin.txt
sed = '2,4d’wulin.txt(=为sed的显示行号,存在问题不是一行显示内容)
cat –n显示行号,grep –n “.” wulin.txt也可以显示行号
s sub 替换(在文件中修改内容)
g global 全局替换
问题:将文件中的wulin字符串全部替换为wulinsckg*
sed ‘s#A#B#g’ 三个#理论上可以用任意字符,
sed -i.bak ‘s#A#B#g’
因为之前在案例中删掉了wulin.txt(但是我们在操作前已经进行了备份)cp wulin.txt.bak wulin.txt
会有提示符,输入y即可
cat wulin.txt(查看还原的内容是否回来)
sed ‘s#wulin#wulinsckg#g’ wulin.txt
会发现内容进行了替换
sed –i.bak ‘s#wulin#wulinsckg#g’ wulin.txt
vimdiff wulin.txt wulin.txt.bak(可以看到两边修改前后,及删除内容对比)
a append 追加(在文件中增加内容)
问题:在wulin.txt文件第二行后追加文本
cat –n wulin.txt
sed -i ‘2a i am wulint’ wulun.txt
vimdiff wulin.txt wulin.txt.bak(两边做了对比,并且在左边的第二行进行追加内容)
i insert 当前插入
问题:在wulin.txt文件的第二行插入文本
sed –i ‘2i i study linux’ wulin.txt
(在第二行插入,原来的第三行移动到第二行)
vimdiff wulin.txt wulin.txt.bak
= 显示行号
() \1 后向引用
练习题
1.取/etc/passwd中第5–15行,重定向到/test.txt
sed –n ‘5,15p’ /etc/passwd〉/test.txt
cat -n /test.txt
2.把/test.txt中以/sbin/nologin结尾的,都修改为/bin/bash
sed -i.bak ‘s#/sbin/nologin#/bin/bash#g’ test.txt
3.查找包含nobody的行
sed -n’/nobody/p’ /test.txt
4.第8行,插入#i am wulin
sed ‘8i i am wulin’ /test.txt
sed –i ‘8i i am wulin’ /test.txt
(补充
sed = ‘8i i am wulin’ /test.txt可以显示行号,但是会存在一个问题行号与内容没有在一行,如果要解决解决方式?
sed = ‘8i i am wulin’ /test.txt|sed ‘N:s/\n/ /’
5.删除9-14行,并修改文件
sed -i ‘9,14d’ /test.txt
问题:在wulin.txt文件的第二行插入两行文本
srd ‘2i i study linux \n’ test.txt
生产场景:配置ssh参数的案例
在文件中增加参数设置
egrep “Port” /etc/ssh/sshd_config
egrep “#Port” /etc/ssh/sshd_config
egrep “#Port|root” /etc/ssh/sshd_config
egrep “#Port|login” /etc/ssh/sshd_config
egrep -i “#Port|#PermitRootLogin” /etc/ssh/sshd_config
egrep -i “#Port|#PermitRootLogin|UseDNS” /etc/ssh/sshd_config
egrep -i “#Port|#PermitRootLogin|UseDNS|” /etc/ssh/sshd_config
egrep -i “#Port|#PermitRootLogin|UseDNS|GSSAPIAuthentication yes” /etc/ssh/sshd_config
根据上面案例解释了在企业中远程连接ssh工具,需要一定的配置(为什么连接有时慢?)
#Port 52113 (默认22断开,黑客也是知道这个端口,工作中这里要改)
#PermitRootLogin yes(禁止root远程登录)
GSSAPIAuthenyication no(解决连接慢)
UseDNS no (解决连接慢)
在后面集群架构阶段要求会一键化搭建
到时候怎么搭建?
sed ‘13i Port 52113\nPermitRootLogin no\nGSSAPIAUthentication no\nUseDNS no’ /etc/ssh/sshd_config
(这里我假如13行,这里大家学习先别进行修改,否则大家ssh远程连接不了,在企业中是要进行改的)
企业中一般我们会加上等号
sed ‘13i #===\nPort 52113\nPermitRootLogin no\nGSSAPIAUthentication no\nUseDNS no\n#=’ /etc/ssh/sshd_config
在命令行输入
sed –i.bak’13i #===\nPort 52113\nPermitRootLogin no\nGSSAPIAUthentication no\nUseDNS no\n#=’ /etc/ssh/sshd_config
查询:
sed -n ‘13,20’ /etc/sshd_config
sed -n ‘13,18p’ /etc/sshd_config
重启
systemctl restart sshd
(如果不这样做,需要vim编辑/etc/ssh/sshd_config文件,将其内容写入到vim这个文件)
取出Linux中执行ifconfig etho 后对应的IP地址(只能输出IP地址)
方法一:利用正则➕sed替换功能取ip
ifconfig eth0
ifconfig eth0|sed -n ‘2p’
取出来为
inet 10.0.0.130 netmask 255.0.0.0 broadcast 10.255.255.255
ifconfig sed -rn’2s###gp’
目标:10.0.0.130
1.干掉ip前面的部分
10.0.0.130 netmask 255.0.0.0 broadcast 10.255.255.255
2.干掉ip后面的部分
10.0.0.130
技巧:
想要的目标是10.0.0.130,干掉它前面的内容^.*net(如果broadcast后面还有一个inet的话,要进行区分这里变成星点net,如果有空格也可以加上空格,以任意多字符开头,给一个唯一结尾的内容)
ifconfig eth0|sed -rn ‘2s#^.星inet ##gp’
10.0.0.130 netmask 255.0.0.0 broadcast 10.255.255.255
net.*$(net前面有空格)以唯一的内容开头,任意多个字符结尾
ifconfig etho|sed -rn '2s#^.星inet ##gp’|sed -rn
‘s# net.星美元符号##gp’
10.0.0.130
测试题
- 取ip a结果的第一块网卡ip
ip a
ip a|grep eth0
ip a|grep eth0|sed -n 2p
ip a|grep eth0|sed -n 2p|sed -rn ‘s#^.*net ##gp’
ip a|grep eth0|sed -n 2p|sed -rn 's#^.*net ##gp’|sed -rn ‘s#/B.星$##gp’
一条命令解决:
ip a|sed - rn ‘$#^.*inet(.星)/8 b.星美元符号#\1#gp’
2.取stat /etc/hosts中的数字权限644
stat /etc/hosts
stat /etc/hosts|sed -rn ‘4s#^.*(0##gp’
stat /etc/hosts|sed–rn '4s#^.星\(0##gp’|sed -rn ‘s#/-.星$##gp’
一条命令:
stat /etc/hosts|sed – rn ‘4s#^.*\(0(.星)/–.星$#\1#gp’
用一条sed命令来实现取IP
后向引用:
想要的内容要用括号括起来匹配,因为后面好把它拿出来。()\1进行取出来
ifconfig eth0|sed –rn ‘s#^.星inet (.*) net.星$#\1#gp’
如果inet (. *) 这两个之间没有空格讲会出现,ip后面有空格(不能精准执行)
补充–e多项编辑可以实现减少管道使用
ifconfig eth0|sed -ne ‘2s#^.*inet ##g’ -ne ‘2s# netm.星$##gp’
下一篇给大家写awk知识点,上面常见的sed用法写到这里后面,会给大家更新与补充!
1) 案例01: 取出文件的第3行 ⭐⭐⭐⭐⭐
-n表示取消默认输出,sed处理文件的时候会默认的输出每一行内容.
sed -n ‘3p’ /etc/passwd
2) 案例02: 取出/etc/passwd的第2行到第5行
⭐⭐⭐⭐⭐
sed -n ‘2,5p’ /etc/passwd
3) 案例03: 过滤出/etc/passwd中包含root的行
⭐⭐⭐⭐⭐
⚠ 注意
sed进行过滤的时候需要使用//ˌ并且里面支持基础正则
如果需要使用扩展正则需要使用sed -r选项
grep ‘root’ /etc/passwd
[root@calms~]# sed -n ‘/root/p’
/etc/passwd
root :x :0:0:root:/root:/bin/bash
operator:x :11:0:operator:/root:/sbin/nologin
[root@calms~]#
[root@calms~]# sed -n ‘/^root/p’
/etc/passwd
root:x :0:0:root:/root:/bin/bash
获取范围内的日志 ⭐⭐⭐⭐⭐
试着取出access.log过滤出11:05分到11:06分的日志
cat >/wulin/sed.txtEOF
101,wulin,CEO
102,wulin,CTO
103.wulin996,COO
104,yy,CFO
105,feixue,CIO
110,wuluin,COCO
EOF
1
2
3
4
5
6
7
8
[root@calms~]# sed -n ‘/102/ , /105/p’ sed.txt
102,bbao,CTO
103,wulin996,COO
104,yy,CFO
105,feixue,CIO
增删改查之替换-进阶
后向引用格式
应用说明:
后向引用或反向引用: 适用于sed命令处理/提取一行中的某一部分.sed命令配合正则实现取列.(类似于awk取列)
sed命令中用于处理列的方式.
使用格式:
使用替换的形式 s###g
前2个井号之间通过正则与(),对数据进行分组.
后面2个井号之间通过\数字,去调用前面分组的内容.
整体是后面调用前面分组的内容,称之为反向引用/后向引用.
应用场景: 某一行中对部分数据进行加工与处理,提取某一部分数据
输出12345678
通过sed加工变成1<234567>8
echo 12345678 |sed -r ‘s#(1)(.*)(8)#\1<\2>\3#g’
1<234567>8
案例 取出网卡ip地址
方法01
[root@calms~]# ip a s eth0 | sed -n
‘3p’ | sed -r ‘s#^.et ([0-9.]+)/.$#\1#g’
10.0.0.200
方法02 进阶
sed -n ‘3p’+ sed -r ‘s#^.et ([0-9.]+)/.$#\1#g’
= sed -nr ‘3 s#^.et ([0-9.]+)/.$#\1#g p’
方法03 awk
[root@calms~]# ip a s eth0 | sed -n
‘3p’ |awk ‘{print $2}’ |sed ‘s#/24Վˁg’
10.0.0.200
方法04 awk
[root@calms~]# ip a s eth0 | sed -n
‘3p’ |awk -F “[ /]+” ‘{print $3}’
10.0.0.200
方法05-06 awk
ip a s eth0 | sed -n ‘3p’ |awk -F “[ /]+” ‘{print
$3}’
[root@calms~]# ip a s eth0 | awk -F "
[ /]+" ‘NR=3{print $3}’
10.0.0.200
方法07
hostname -I
取出stat /etc/hosts中的0644或644
[root@calms~]# stat /etc/hosts |sed -
n ‘4p’ | sed -r ‘s#^.(([0-9]+)/.$#\1#g’
0644