昆明网站制作,响应式 网站建设,土建设计网站,wordpress获取当前页面链接正则表达式匹配的是文本内容#xff0c;文本三剑客都是针对文本内容。
grep#xff1a;过滤文本内容
sed#xff1a;针对文本内容进行增删改查
awk#xff1a;按行取列
一、grep
grep的作用使用正则表达式来匹配文本内容
1、grep选项
-m#xff1a;匹配几次之后停止…正则表达式匹配的是文本内容文本三剑客都是针对文本内容。
grep过滤文本内容
sed针对文本内容进行增删改查
awk按行取列
一、grep
grep的作用使用正则表达式来匹配文本内容
1、grep选项
-m匹配几次之后停止
#查找所有包含root的文本内容
[rootlocalhost opt]# grep root /etc/passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
#使用-m选项匹配1次之后就停止
[rootlocalhost opt]# grep -m 1 root /etc/passwd
root:x:0:0:root:/root:/bin/bash-v 取反 除了所要查的其他全部显示
#除了root其他都打印
[rootlocalhost opt]# grep -v root /etc/passwd
-n显示匹配的行号 -c 只统计匹配的行数
[rootlocalhost opt]# grep -c root /etc/passwd
2
-o 仅限显示匹配到的结果
#显示所有的root
[rootlocalhost opt]# grep -o root /etc/passwd
root
root
root
root
-q 静默模式不输出任何信息
-A after 数字后几行
#匹配到当前内容并附带3行
[rootlocalhost opt]# grep -A 3 root /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
--
#定位
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
-B before数字前几行
#匹配到前面3行
[rootlocalhost opt]# grep -B 3 dn /etc/passwd
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
tcpdump:x:72:72::/:/sbin/nologin
test2:x:1000:1000:test2:/home/test2:/bin/bash
#定位
dn:x:1001:1001::/home/dn:/bin/bash
-C 数字 前后各几行
显示zlm前后各3行
[rootlocalhost opt]# grep -C 3 zlm /etc/passwd
tcpdump:x:72:72::/:/sbin/nologin
test2:x:1000:1000:test2:/home/test2:/bin/bash
dn:x:1001:1001::/home/dn:/bin/bash
#定位
zlm:x:1002:1002::/home/zlm:/bin/bash
#定位
zdm:x:1003:1003::/home/zdm:/bin/bash
zxc:x:1010:1010::/home/zxc:/bin/bash
nginx:x:1012:1012::/home/nginx:/sbin/nologin
-e 多个条件 逻辑或
-E匹配扩展正则表达式
-f 匹配两个文件相同的内容按顺序以第一个文件为准
[rootlocalhost opt]# cat 111.txt
qq
112
123
[rootlocalhost opt]# cat 222.txt
123
#匹配两个文件相同的内容按顺序以第一个文件为准
[rootlocalhost opt]# grep -f 111.txt 222.txt
123
-r 递归目录 目录下的文件内容软连接不包含在内
#在opt目录下查找关于123123是内容
[rootlocalhost opt]# grep -r 123 /opt/
/opt/xy102.txt:123
/opt/222.txt:123
/opt/test.txt:123
/opt/dec/test.txt:123
/opt/dec/xy102.txt:123
/opt/111.txt:123
-R递归目录 目录下的文件内容软连接包含在内
二、sort
sort以行为单位对文件的内容进行排序
格式
sort 选项 参数 或者使用cat file | sort 选项
-f 忽略大小写先排数字字母按顺序默认就会把大写字母排在最前面
[rootlocalhost opt]# cat 111.txt
qq
112
BBB
122
AAA
bbb
忽略大小写先排数字字母按顺序
[rootlocalhost opt]# sort -f /opt/111.txt
112
122
AAA
BBB
bbb
qq
-b 忽略每行之前的空格先排数字字母按顺序不是把空格删除只是依然按照数字和字母的顺序排列
[rootlocalhost opt]# cat /opt/111.txt
qq
112
123
122123
bbb
#忽略空格先排数字字母按顺序
[rootlocalhost opt]# sort -b /opt/111.txt
112
122
123123
bbb
qq
-n 按照数字进行排序 字母在前数字往后排
[rootlocalhost opt]# sort -n /opt/111.txt
bbb
qq
112
122
123
123
-r 反向排序
[rootlocalhost opt]# cat -n /opt/111.txt 1 qq2 1123 1234 1225 1236 bbb7 #反向输出文本内容
[rootlocalhost opt]# cat -n /opt/111.txt | sort -r7 6 bbb5 1234 1223 1232 1121 qq
-u 表示相同的数据只显示1行
[rootlocalhost opt]# cat 111.txt
qq
112
123
122
123
qq[rootlocalhost opt]# sort -u 111.txt 112
122
123
qq
-o 把排序后的结果转存到指定的文件
[rootlocalhost opt]# cat -n /etc/passwd | sort -rno /opt/cp.txt
三、uniq
uniq去重 去除连续的重复的行只显示一行
选项
-c 统计连续重复的行的次数合并连续重复的行
[rootlocalhost opt]# cat 111.txt
qq
112
BBB
122
122
122
AAA
BBB
BBB
bbb
[rootlocalhost opt]# uniq -c 111.txt 1 qq1 1121 BBB3 1221 AAA2 BBB1 bbb
-u显示仅出现一次的行包括不是连续出现的重复行
[rootlocalhost opt]# cat 111.txt
qq
112
BBB
122
122
122
AAA
BBB
BBB
bbb
[rootlocalhost opt]# uniq -u 111.txt
qq
112
BBB
AAA
bbb
-d 仅显示连续重复的行不包括非连续出现的内容
[rootlocalhost opt]# cat 111.txt
qq
112
BBB
122
122
122
AAA
BBB
BBB
bbb
[rootlocalhost opt]# uniq -d 111.txt
122
BBB
4、tr
tr用来对标准输出的字符进行替换压缩和删除
格式tr 选项 参数
-c 保留字符集1的字符其他的字符用字符集2进行替换
echo abc | tr -c ab a输出结果 abaa
-d删除字符集中的一部分
[rootlocalhost ~]# echo abc | tr -d ab
c
-s替换 把字符集1的部分替换成字符集2的部分连续重复出现的字符压缩成一个字符串
[rootlocalhost ~]# echo aaabc | tr -s a
abc
[rootlocalhost ~]# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
[rootlocalhost ~]# echo $PATH | tr -s : ;
/usr/local/sbin;/usr/local/bin;/usr/sbin;/usr/bin;/root/bin
四、cut
cut快速裁剪 对字段进行采取和裁剪
-d 指定分隔符默认的分隔符是tab键 不需要使用-d
-f 对字段进行截取指定输出段的内容
裁剪etc/passwd以分割符的1-3行 1,3截取1行和3行
[rootlocalhost ~]# head -n 1 /etc/passwd | cut -d : -f 1-3
root:x:0
[rootlocalhost ~]# head -n 1 /etc/passwd | cut -d : -f 1,3
root:0
[rootlocalhost ~]# head -n 1 /etc/passwd
root:x:0:0:root:/root:/bin/bash
-b以字节为单位进行截取
-c 以字符为单位进行截取
-complement 输出的时候排除指定的字段
-output-delimiter更改输出内容的分隔符
输出的时候以分割符的不显示第2个
[rootlocalhost ~]# head -n 1 /etc/passwd | cut -d : --complement -f 1
x:0:0:root:/root:/bin/bash
[rootlocalhost ~]# head -n 1 /etc/passwd | cut -d : --output-delimiter -f 1-5
rootx00root
五、split
split 大文件拆分成若干小的文件
-l 按行来进行分割
[rootlocalhost opt]# split -l 20 test1.txt 123 将test1.txt文件 按20进行分割 -b 按照大小来进行分割
1、cat合并和paste合并有什么区别
cat合并是上下
paste是左右合并
[rootlocalhost opt]# cat 3.txt
11111111111111
aaaaa
[rootlocalhost opt]# paste 1.txt 2.txt 4.txt
[rootlocalhost opt]# cat 4.txt
11111111111111 aaaaa
2、 统计当前主机的连接状态
[rootlocalhost opt]# ss -antp | grep -v ^State | cut -d -f 1 | sort | uniq -c2 ESTAB15 LISTEN
#grep -v ^State取反除了以State开头的其他所有
#cut -d -f 1 以空格为分割符裁剪第一行
# sort 排序
#uniq -c 将连续重复的去重并显示数量
六、正则表达式
正则表达式由一类特殊字符以及字符所编写的一个模式模式又来匹配文件当中的内容字符
校验我们输入的内容是否满足规定格式长度等等要求
主要用来匹配文本内容命令的结果
通配符只能用于匹配文件名和目录名不能匹配文件的内容和命令结果
正则表达式基本正则表达式
1、元字符字符匹配
. 任意单个字符也可以是一个汉字每个字符都看一遍 \ 转义符恢复其本意使用单引号或者双引号 引起来 []匹配指定范围内的任意单个字符或者数字
[] 中可以匹配多个 例如空格 大小写字母放在一起每个条件不需要使用空格隔开
在正则表达式中更精确
[^]取反
^# 匹配以#为开头 ^a以a为开头
^$表示空行 grep ^$ test1.txt 匹配空行
2、次数匹配
次数匹配匹配字符出现的次数
*匹配前面的字符任意次0次也可以。贪婪模式尽可能的匹配
.*匹配前面的任意字符至少要有1次匹配所有。
\? 匹配前面的字符0次或者1次可有可无
\ 匹配前面的字符至少出现一次
\ {n\}匹配前面的字符n次 可以小于n但不能大于n而且前面的字符必须连续出现。a \{2\}
\{m,n\}匹配前面的字符至少m次至多n次且字符要连续出现超出的不在匹配范围
\{,n\}匹配前面的字符最多n次
\{n,\}匹配前面的字符最少n次
3、位置锚定
^:以什么开头 行首 ^1以1为开头
$:以什么结尾 行尾 4$以4为结尾 ^root$这一行只能有root ^$ 空行
\或者\b 词首锚定匹配单词的左侧连续的数字字母下划线都算单词内部
\或者\b 词尾锚定用于匹配单词的右侧
hello-123
词首hello\b 或者 hello-\b
词尾\b123 或者\b-123
\broot\b 匹配整个单词root。空格隔开的也算整个单词
与^root$区别整个一行只有这个单词
4、分组和逻辑关系
分组:()表示分组 或者\| 逻辑或的意思 七、 扩展正则表达式
扩展正则表达式基本正则表达式的选项前的 \ 全部不用
特殊\b需要加\
grep -E 扩展正则或者egrep不需要E
实例:打印2.txt文件中的电话号码
[rootlocalhost test1]# cat 2.txt | grep -E (\([0-9]\)|[0-9])[ -]?[0-9]-[0-9] 小练习 1、显示/etc/passwd中以sh结尾的行;
[rootlocalhost test1]# cat /etc/passwd | grep -E sh$ 2、查找/etc/inittab中含有“以s开头并以d结尾的单词”模式的行
[rootlocalhost test1]# cat /etc/inittab | grep -E (\bs[a-z]*d\b) 3、查找ifconfig命令结果中的1-255之间的整数
[rootlocalhost /]# ifconfig | grep -E \b([1-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\b 4、在/etc/passwd中取出默认shell为bash的行
[rootlocalhost test1]# cat /etc/passwd | grep -E bash$ 5、高亮显示passwd文件中冒号及其两侧的字符
[rootlocalhost test1]# cat /etc/passwd | grep -E .?:*:. 八、 sed
1、sed文件三剑客之二
sed 是有一种流编辑器一次处理一行内容
处理方式如果只是展示会放在缓冲区模式空间展示结束之后会从模式空间把操作结果删除
处理模式一行一行处理处理完当前行才会处理下一行直到文件的末尾
sed的命令格式以及操作选项
sed -e 操作选项 -e 操作选项 文件1 文件2
-e 表示可以跟多个操作符只有一个操作-e可以省略
sed -e 操作符1操作符2 文件1 文件2
2、选项
-e用于执行多个操作命令
-f 在脚本中定义好了操作符然后根据脚本内容的操作符对文件进行操作
-i直接修改目标文件慎用
-n仅显示scrip处理后的结果不加-n sed会有俩个输出结果加了-n之后就会把默认的输出屏蔽只显示一个结果
3、操作符
p打印结果
r使用扩展正则表达式
s替换替换字符串
c替换替换行
y替换替换单个字符多个字符替换必须和替换内容的长度保存一致
d删除删除行
a增加在指定行的下一行插入内容
i增加在指定行的上一行插入内容
r在行后增加文件内容读取其他文件
$a在最后一行插入内容
$i在倒数第二行插入新的内容
$r读取其他文件的内容然后插入到对象文件的最后一行
4、打印功能
打印内容
[rootlocalhost opt]# sed -n p test1.txt
one
two
three
four
five
six
seven
eight
nine
ten
寻址打印
显示行号
[rootlocalhost opt]# sed -n test1.txt
1
2
3
4
5
6
7
8
9即显示行号又显示内容
[rootlocalhost opt]# sed -n ;p test1.txt
1
one
2
two
3
three
4
four
5
five
6
six
7
seven
8
eight
9
nine
10
ten 指定地址查找
只显示第4行
[rootlocalhost opt]# sed -n 4p test1.txt
four
打印最后一行 $p
[rootlocalhost opt]# sed -n $p test1.txt
ten
行号范围打印
从2行打印到末尾
[rootlocalhost opt]# sed -n 2,$p test1.txt
two
three
four
five
six
seven
eight
nine
ten
打印第二行和第五行[rootlocalhost opt]# sed -n 2p;5p test1.txt
two
five
打印奇数行和偶数行
奇数
[rootlocalhost opt]# sed -n p;n test1.txt
one
three
five
seven
nine
偶数
[rootlocalhost opt]# sed -n n;p test1.txt
two
four
six
eight
ten
#n的作用跳过一行打印下一行
5、文本内容进行过滤
过滤并打印包含o 的行 /所要查找的内容/
[rootlocalhost opt]# sed -n /o/p test1.txt
one
two
four
过滤并打印包含th的行
[rootlocalhost opt]# sed -n /th/p test1.txt
three 使用正则表达式对文本内容进行过滤
[rootlocalhost opt]# sed -n /^root/p /etc/passwd
root:x:0:0:root:/root:/bin/bash
从指定行开始打印到第一个以bash为结尾的行
从第8行打印到第一个以bash为结尾的行
[rootlocalhost opt]# sed -n 8,/bash$/p /etc/passwd
sed可使用的正则表达式 * .* {n,m} {n,}{,m} ? | ()
要么以root为开头要么以bash为结尾
[rootlocalhost opt]# sed -rn /^root|bash$/p /etc/passwd
root:x:0:0:root:/root:/bin/bash
test2:x:1000:1000:test2:/home/test2:/bin/bash
dn:x:1001:1001::/home/dn:/bin/bash
zlm:x:1002:1002::/home/zlm:/bin/bash
zdm:x:1003:1003::/home/zdm:/bin/bash
zxc:x:1010:1010::/home/zxc:/bin/bash
qwe:x:1013:1013::/home/qwe:/bin/bash
gfw:x:1014:1014::/home/gfw:/bin/bash
xy102:x:1015:1015::/home/xy102:/bin/bash
zkm:x:1016:1016::/home/zkm:/bin/bash
6、小练习 如何免交互删除文本内容
sed方式
#-i 进入文本操作
#d删除
[rootlocalhost opt]# sed -i d test1.txt
cat方式
cat /dev/null test1.txt
7、 sed 的删除操作
删除指定行
删除第三行并打印剩下的行
[rootlocalhost opt]# sed -n 3d;p test1.txt
one
two
four
five
six
sevend
eight
nine
ten
除了第三行其他都删除
[rootlocalhost opt]# sed -n 3!d;p test1.txt
three
除了第3行到第6行其他都删除
[rootlocalhost opt]# sed -n 3,6!d;p test1.txt
three
four
five
six
匹配字符串的方式删除行
删除包含o的行
[rootlocalhost opt]# sed /o/d test1.txt
three
five
six
seven
eight
nine
ten
删除从one到six的行
[rootlocalhost opt]# sed /one/,/six/d test1.txt
seven
eight
nine
ten 如何免交互的方式删除空行
[rootlocalhost opt]# cat test1.txt
one
two
three
fourfive
six
seven
eight
nine
ten[rootlocalhost opt]# grep -v ^$ test1.txt
one
two
three
four
five
six
seven
eight
nine
ten[rootlocalhost opt]# cat test1.txt | tr -s \n
one
two
three
four
five
six
seven
eight
nine
ten[rootlocalhost opt]# sed /^$/d test1.txt
one
two
three
four
five
six
seven
eight
nine
ten8、主要功能s替换字符串
替换每行第一个root
[rootlocalhost opt]# sed -n s/root/test/p /etc/passwd
test:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/test:/sbin/nologin
替换每行第二个root
[rootlocalhost opt]# sed -n s/root/test/2p /etc/passwd
root:x:0:0:test:/root:/bin/bash
替换每行所有root
[rootlocalhost opt]# sed -n s/root/test/gp /etc/passwd
test:x:0:0:test:/test:/bin/bash
operator:x:11:0:operator:/test:/sbin/nologin
添加#实现注释功能
注释所有行
[rootlocalhost opt]# sed -n s/^/#/p test1.txt
#one
#two
#three
#four
#
#
#five
#six
#seven
#eight
#nine
#ten
注释4到5
[rootlocalhost opt]# sed -n 4,5 s/^/#/p test1.txt
#four
#
注释4和7行
[rootlocalhost opt]# sed -n 5 s/^/#/p;7 s/^/#/p test1.txt
#
#five
首字母变大写
u 转换首字母大写的特殊符合\转义符
将首字母改为小写
[rootlocalhost opt]# sed s/[a-z]/\u/ test1.txt
One
Two
Three
FourFive
Six
Seven
Eight
Nine
Ten将所有的字母都替换成大写s/[a-z]/\u/g
[rootlocalhost opt]# sed s/[a-z]/\u/g test1.txt
ONE
TWO
THREE
FOURFIVE
SIX
SEVEN
EIGHT
NINE
TEN l把大写转换成小写的特殊字符\转义符
[rootlocalhost opt]# sed s/[A-Z]/\l/ test2.txt
aAAA
bB
cC
所有替换 s/[A-Z]/\l/g
[rootlocalhost opt]# sed s/[A-Z]/\l/g test2.txt
aaaa
bb
cc 整行替换
[rootlocalhost opt]# sed /one/c 1 test1.txt
1
two
three
four
five
six
seven
eight
nine
ten 9、单个替换
将/etc/sysconfig/network-scripts/ifcfg-ens33 的ip地址修改为192.168.10.100
[rootlocalhost opt]# sed /^IP/c IPADDR192.168.10.100 /etc/sysconfig/network-scripts/ifcfg-ens33
TYPEEthernet
DEVICEens33
ONBOOTyes
BOOTPROTOstatic
#替换结果
IPADDR192.168.10.100
NETMASK255.255.255.0
GATEWAY192.168.10.2
DNS1218.2.135.1
y单字符替换
将所有的t替换成1 w替换成2 o 替换成3
[rootlocalhost opt]# sed y/two/123/ test1.txt
i 3ne
123
1hree
f3ur
five
six
seven
eigh1
nine
1en
10、 增加功能
#使用a在第3行的下一行插入一个zai
[rootlocalhost opt]# sed 3a zai test1.txt
i one
two
three
#新增显示内容
zai
four
five
six
seven
eight
nine
ten
#使用i在第5行的上一行插入一个ba
[rootlocalhost opt]# sed 5i ba test1.txt
i one
two
three
four
#新增显示内容
ba
five
six
seven
eight
nine
ten
#使用r将test2.txt的内容插入到test1.txt文件中two的下方
[rootlocalhost opt]# sed /two/r test2.txt test1.txt
i one
two
#新增显示内容
AAAA
BB
CCthree
four
five
six
seven
eight
nine
ten
使用$a将内容插入在文本内容的最后一行
[rootlocalhost opt]# sed $a zai test1.txt
i one
two
three
four
five
six
seven
eight
nine
ten
#新增显示内容
zai
使用$i将内容插入在文本内容的倒数第二行
[rootlocalhost opt]# sed $i zai test1.txt
i one
two
three
four
five
six
seven
eight
nine#新增显示内容
zai
ten
使用$r将test2.txt的内容插入到test1.txt文件中最后一行
[rootlocalhost opt]# sed $r test2.txt test1.txt
i one
two
three
four
five
six
seven
eight
nine
ten
AAAA
BB
CC
11、 sed进阶部分
使用sed对字符串和字符的位置进行互换
#字符串先进行分组分组之后进行位置排序
[rootlocalhost opt]# echo ABC | sed -r s/(A)(B)(C)/\1\3\2/
ACB
[rootlocalhost opt]# echo ABC | sed -r s/(A)(B)(C)/\3\1\2/
CAB
[rootlocalhost opt]# echo ABC | sed -r s/(A)(B)(C)/\2\1\3/
BAC
[rootlocalhost opt]# echo zhangxiaoming | sed -r s/(zhang)(xiao)(ming)/\3\1\2/
mingzhangxiao对字符位置进行互换先分组使用.代替字符也可以直接使用原字符然后再进行排序
[rootlocalhost opt]# echo 猪小明 | sed -r s/(.)(.)(.)/\3\2\1/
明小猪
取出.jar之前的版本号
[rootlocalhost opt]# cat test3.txt
ant-1.9.7.jar
ant-launcher-1.9.7.jar
antlr-2.7.7.jar
antlr-runtime-3.4.jar
aopalliance-1.0.jar
archaius-core-0.7.6.jar
asm-5.0.4.jar
aspectjweaver-1.9.5.jar
bcpkix-jdk15on-1.64.jar
bcprov-jdk15-1.46.jar
bcprov-jdk15on-1.64.jar
checker-compat-qual-2.5.5.jar[rootlocalhost opt]# cat test3.txt | grep -E [0-9]\.
使用grep命令 使用sed命令
#先进行分组分成3个组 .*代表任意长度的字符串 版本号位于第二组 取出第2组即可
[rootlocalhost opt]# cat test1.txt | sed -r s/(.*)-(.*)(.jar)/\2/ test3.txt
1.9.7
1.9.7
2.7.7
3.4
1.0
0.7.6
5.0.4
1.9.5
1.64
1.46
1.64
2.5.5
12、 打印指定时间内的日志
[rootlocalhost opt]# sed -n /Jun 21 13:50:01/,/Jun 21 14:01:01/p /var/log/messages
13、使用脚本的形式结合sed命令把pxe自动装机做一个shell脚本
#关闭防火墙以及安全机制
systemctl stop firewalld
setenforce 0
#安装TFTP,xinetd服务并将服务启动
yum -y install tftp-server xinetd
systemctl start tftp
systemctl enable tftp
systemctl start xinetd.service
systemctl enable xinetd.service
#vim /etc/xinetd.d/tftp管理tftp服务配置
sed -i s/yes/no/g /etc/xinetd.d/tftp
#编辑文本内容
#wait no
#修改成 no 可以并行安装多台客户机
#disable no
#修改成 no 后台启动tftp重启两个服务
systemctl restart tftp
systemctl restart xinetd
配置DHCP
先安装dhcp服务
yum -y install dhcp
对dhcp服务进行配置复制dhcp样板配置文件覆盖dhcp实际的配置文件
yes | cp /usr/share/doc/dhcp-4.2.5/dhcpd.conf.example /etc/dhcp/dhcpd.conf
sed -i s/#ddns-update-style none;/ddns-update-style none;/ /etc/dhcp/dhcpd.conf
sed -i 15a next-server 192.168.10.20; /etc/dhcp/dhcpd.conf
sed -i 16a filename pxelinux.0; /etc/dhcp/dhcpd.confsed -i s/subnet 10.254.239.0 netmask 255.255.255.224 {/ subnet 192.168.10.0 netmask 255.255.255.0 {/ /etc/dhcp/dhcpd.conf
sed -i s/range 10.254.239.10 10.254.239.20;/range 192.168.10.100 192.168.10.110;/ /etc/dhcp/dhcpd.conf
sed -i s/rtr-239-0-1.example.org, rtr-239-0-2.example.org;/192.168.10.20;/ /etc/dhcp/dhcpd.confsystemctl restart dhcpd
#挂载光盘
mount /dev/cdrom /mnt/
cp /mnt/images/pxeboot/initrd.img /var/lib/tftpboot/
cp /mnt/images/pxeboot/vmlinuz /var/lib/tftpboot/
yum -y install syslinux
cp /usr/share/syslinux/pxelinux.0 /var/lib/tftpboot/
yum -y install vsftpd
mkdir /var/ftp/centos7
cp -rf /mnt/* /var/ftp/centos7
systemctl restart vsftpdmkdir /var/lib/tftpboot/pxelinux.cfg cat /var/lib/tftpboot/pxelinux.cfg/default EOF
default auto
prompt 0label auto
kernel vmlinuz
append initrdinitrd.img methodftp://192.168.10.20/centos7 ksftp://192.168.10.20/ks.cfglabel linux text
kernel vmlinuz
append initrdinitrd.img methodftp://192.168.10.20/centos7
label linux rescue
kernel vmlinuz
append initrdinitrd.img methodftp://192.168.10.20/centos7
EOF#无人值守部分
yum -y install system-config-kickstart
cat /var/ftp/ks.cfg EOF
#platformx86, AMD64, or Intel EM64T
#versionDEVEL
install
keyboard us
url --urlftp://192.168.10.20/centos7
lang zh_CN
auth --useshadow --passalgosha512
graphical
firstboot --disable
selinux --disabled
firewall --disabled
network --bootprotodhcp --deviceens33
reboot
timezone Asia/Shanghai
bootloader --locationmbr
zerombr
clearpart --all --initlabel
part /boot --fstypexfs --size512
part /home --fstypexfs --size4096
part swap --fstypeswap --size4096
part / --fstypexfs --grow --size1
%packages
base
core
desktop-debugging
dial-up
directory-client
fonts
gnome-desktop
guest-desktop-agents
input-methods
internet-browser
java-platform
multimedia
network-file-system-client
print-client
x11
binutils
chrony
ftp
gcc
kernel-devel
kexec-tools
make
open-vm-tools
patch
python
%end
EOF
九、awk
文件三剑客最后一个awk
wk 按行取列
awk默认分割符空格tab键多个空格自动压缩成一个。
awk的工作原理根据指令信息逐行的读取文本内容然后按照条件进行格式化输出。
1、awk的选项
-F 指定分隔符默认就是空格
-v 变量赋值
2、内置变量
$#:(#表示数字) 按行需要取出的第几个字段
$0打印所有展示所有的文本内容默认
NR需要处理的行号
NF处理行的字段个数特殊的$NF表示当前行的最后一个字段几个字段
FSFS和F是一样的都是指定分隔符-FFS:
OFS指定输出内容的分隔符
RS行分割符可以根据RS的设置把文件内容切割成多个记录也可以改变行的分隔符默认是\n回车换行。
格式
awk -F ‘操作符动作’处理对象
-F指定分隔符如果是空格可以不加 动作默认就是打印
[rootlocalhost opt]# awk {print} awk.txt #print后没加东西默认$0
one two three
four five six
eight nine ten
[rootlocalhost opt]# awk {print NR} awk.txt #仅打印行号
1
2
3
4
[rootlocalhost opt]# awk {print NR,$0} awk.txt #不仅打印行号也显示内容
1 one two three
2 four five six
3 eight nine ten
4
打印指定行
[rootlocalhost opt]# awk NR2{print} awk.txt #打印指定的第2行
four five six
[rootlocalhost opt]# awk NR2,NR5{print} awk.txt #打印2到5行
four five six
eight nine ten
a b c
d e f
[rootlocalhost opt]# awk NR2;NR5{print} awk.txt #打印第2和第5行
four five six
d e f
[rootlocalhost opt]# awk NR%20{print} awk.txt #打印偶数行
four five six
a b c
g h i
m i n
[rootlocalhost opt]# awk NR%21{print} awk.txt #打印奇数行
one two three
eight nine ten
d e f
j k l
指定分隔符 -F要分割符 #以为分割符查找1到3行的第3列
[rootlocalhost opt]# awk -F: NR1,NR3{print $3} /etc/passwd
0
1
2
#打印第2行和第3行的第1列
[rootlocalhost opt]# awk -F: NR2{print $1};NR3{print $1} /etc/passwd
bin
daemon
3、awk怎么使用文本过滤
#过滤root也可以使用正则表达式
[rootlocalhost opt]# awk /root/{print} /etc/passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin#正则表达式
[rootlocalhost opt]# awk /bash$/{print} /etc/passwd
root:x:0:0:root:/root:/bin/bash
test2:x:1000:1000:test2:/home/test2:/bin/bash
dn:x:1001:1001::/home/dn:/bin/bash
zlm:x:1002:1002::/home/zlm:/bin/bash
zdm:x:1003:1003::/home/zdm:/bin/bash
xy102:x:1004:1004::/home/xy102:/bin/bash
zzz:x:1006:1005::/home/zzz:/bin/bash
zxc:x:1010:1010::/home/zxc:/bin/bash
qqq:x:1011:1011::/home/qqq:/bin/bash
4、BEGIN模式进行打印
格式awk BEGIN{...};{...};END{...} 文件
BEGIN{...}表示预先的条件执行awk命令前的初始化操作
第二个{...}处理条件如何对初始值进行操作
END{...}处理完之后的操作一般都是打印
#BEGIN与END连用
有初始条件
[rootlocalhost opt]# awk BEGIN{x1};{x};END{print x} awk.txt
9
#统计行数
[rootlocalhost opt]# awk BEGIN{x0};{x};END{print x} awk.txt
8
#单独使用BEGIN一次性执行不需要处理条件
#乘法
[rootlocalhost opt]# awk BEGIN{print 10*2} awk.txt
20
#幂运算
[rootlocalhost opt]# awk BEGIN{print 2**3} awk.txt
8
#次方
[rootlocalhost opt]# awk BEGIN{print 2^3} awk.txt
8
5、变量赋值
将外面的a的值传到awk里面进行赋值加一个 -v
read -p 输入第一个数 num1
read -p 输入第二个数 num2
sum$(awk -v num1$num1 -v num2$num2 BEGIN{print num1^num2})
echo $sum
结果
[rootlocalhost opt]# sh awk.sh
输入第一个数2
输入第二个数3
8
6、不常用选项了解
使用OFSS将换成
[rootlocalhost opt]# awk -v FS: -v OFS {print $1,$3} /etc/passwd
root0
bin1
daemon2
adm3
7、 使用awk 进行条件判断打印
打印第三列大于999打印所有
[rootlocalhost opt]# awk -F: $3999{print $0} /etc/passwd
nfsnobody:x:65534:65534:Anonymous NFS User:/var/lib/nfs:/sbin/nologin
test2:x:1000:1000:test2:/home/test2:/bin/bash
dn:x:1001:1001::/home/dn:/bin/bash
zlm:x:1002:1002::/home/zlm:/bin/bash
zdm:x:1003:1003::/home/zdm:/bin/bash
xy102:x:1004:1004::/home/xy102:/bin/bash
zzz:x:1006:1005::/home/zzz:/bin/bash
zxc:x:1010:1010::/home/zxc:/bin/bash
qqq:x:1011:1011::/home/qqq:/bin/bash
nginx:x:1012:1012::/home/nginx:/sbin/nologin
条件判断第三列等于1000并打印所有
[rootlocalhost opt]# awk -F: ($31000){print $0} /etc/passwd
test2:x:1000:1000:test2:/home/test2:/bin/bash
8、awk的三元表达式
if else 语句
格式awk -F: num$3$4? $3:$4;
转换成if语句ifelsefiif$3$4thenecho $3elseecho $4fi
9、 awk的精确筛选
$n()用于比较数值
$n~字符串 表示该字段包含某个字符串
$n!~字符串 该字段不包含某个字符串
$n字符串 该字段等于这个字符串
$n!字符串 该字段不等于这个字符串
$NF 代表最后一个字段
#打印第7列包含bash这个字段的行取得是行的第一列和最后一列以作为分隔符
[rootlocalhost opt]# awk -F: $7~bash {print $1,$NF} /etc/passwd
#取出第1列第2列和第3列没有范围表示的只有什么和什么
[rootlocalhost opt]# awk -F: $7~bash {print $1,$2,$3} /etc/passwd
root x 0
test2 x 1000
dn x 1001
zlm x 1002
zdm x 1003
xy102 x 1004
zzz x 1006
zxc x 1010
qqq x 1011
#精确匹配带有/bin/bash的字符串后面跟着的必须是完整的字符串错一个字符也不能匹配到
[rootlocalhost opt]# awk -F: $7/bin/bash {print $1,$2,$3} /etc/passwd
root x 0
test2 x 1000
dn x 1001
zlm x 1002
zdm x 1003
xy102 x 1004
zzz x 1006
zxc x 1010
qqq x 1011
10、逻辑关系
且和或
第一列等于dn且第七列等于/bin/bash
逻辑且 $1dn可以使用括起来
[rootlocalhost opt]# awk -F: $1dn $7/bin/bash {print $1,$7} /etc/passwd
dn /bin/bash
逻辑或
[rootlocalhost opt]# awk -F: $1dn || $7/bin/bash {print $1,$7} /etc/passwd
root /bin/bash
test2 /bin/bash
dn /bin/bash
zlm /bin/bash
zdm /bin/bash
xy102 /bin/bash
zzz /bin/bash
zxc /bin/bash
qqq /bin/bash
11、curl
curl是一个功能强大的命令
获取和发送数据
curl 域名/ip地址 获取网页的内容并且输出
curl www.baidu.com
curl 192.168.10.20
-O 下载文件到本地
-o 将文件下载到指定的路径
-x 发生post请求
-i 可以获取web软件的版本服务端没有隐藏
按行取列盘不包含那个行的处理
12、小练习
awk取小数点几位以及小数运算怎么取整数
num$(awk BEGIN{printf %.2f,1.222*1.222})
取小数点后两位但是会四舍五入
[rootlocalhost nginx]# echo $num
1.49
只取整数部分
[rootlocalhost nginx]# num$(awk BEGIN{printf %.F,1.2221.222})
[rootlocalhost nginx]# echo $num
2 连续取出test1.txt文件中的域名部分
[rootlocalhost opt]# cat test1.txt
1 www.kgc.com
2 mail.kgc.com
3 ftp.kgc.com
4 linux.kgc.com
5 blog.kgc.co主机名取出来
[rootlocalhost opt]# cat test1.txt | awk -F [ .] {print $2}
www
mail
ftp
linux
blog