当前位置: 首页 > news >正文

正则表达式以及文本三剑客grep、sed、awk

正则表达式匹配的是文本内容,文本三剑客都是针对文本内容。

grep:过滤文本内容

sed:针对文本内容进行增删改查

awk:按行取列

一、grep

grep的作用使用正则表达式来匹配文本内容

1、grep选项

-m:匹配几次之后停止

#查找所有包含root的文本内容
[root@localhost opt]# grep  root /etc/passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
#使用-m选项匹配1次之后就停止
[root@localhost opt]# grep -m 1 root /etc/passwd
root:x:0:0:root:/root:/bin/bash

-v :取反 除了所要查的其他全部显示

#除了root其他都打印
[root@localhost opt]# grep  -v root /etc/passwd

-n:显示匹配的行号

-c :只统计匹配的行数  

[root@localhost opt]# grep -c root /etc/passwd
2

-o :仅限显示匹配到的结果

#显示所有的root
[root@localhost opt]# grep -o root /etc/passwd
root
root
root
root

-q :静默模式,不输出任何信息

-A (after) 数字:后几行

#匹配到当前内容并附带3行
[root@localhost 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行
[root@localhost 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行
[root@localhost 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 :匹配两个文件相同的内容,按顺序以第一个文件为准

[root@localhost opt]# cat 111.txt
qq
112
123
[root@localhost opt]# cat 222.txt
123
#匹配两个文件相同的内容,按顺序以第一个文件为准
[root@localhost opt]# grep -f 111.txt 222.txt
123

-r :递归目录 目录下的文件内容,软连接不包含在内  

#在opt目录下查找关于123(123是内容)
[root@localhost 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 :忽略大小写,先排数字,字母按顺序,默认就会把大写字母排在最前面

[root@localhost opt]# cat 111.txt 
qq
112
BBB
122
AAA
bbb
忽略大小写,先排数字,字母按顺序
[root@localhost opt]# sort -f /opt/111.txt 
112
122
AAA
BBB
bbb
qq

-b :忽略每行之前的空格,先排数字,字母按顺序(不是把空格删除,只是依然按照数字和字母的顺序排列)

[root@localhost opt]# cat  /opt/111.txt 
qq
112
123
122123
bbb
#忽略空格,先排数字,字母按顺序
[root@localhost opt]# sort -b /opt/111.txt 
112
122
123123
bbb
qq

-n :按照数字进行排序 字母在前,数字往后排

[root@localhost opt]# sort -n /opt/111.txt 
bbb
qq
112
122
123
123

-r :反向排序

[root@localhost opt]# cat -n /opt/111.txt 1	qq2	1123	1234	1225	1236	bbb7	#反向输出文本内容
[root@localhost opt]# cat -n /opt/111.txt | sort -r7	6	bbb5	1234	1223	1232	1121	qq

-u :表示相同的数据只显示1行

[root@localhost opt]# cat 111.txt
qq
112
123
122
123
qq[root@localhost opt]# sort -u 111.txt 112
122
123
qq

-o :把排序后的结果转存到指定的文件

[root@localhost opt]# cat -n /etc/passwd | sort -rno /opt/cp.txt

三、uniq

uniq去重 去除连续的重复的行,只显示一行

选项

-c: 统计连续重复的行的次数,合并连续重复的行

[root@localhost opt]# cat 111.txt 
qq
112
BBB
122
122
122
AAA
BBB
BBB
bbb
[root@localhost opt]# uniq -c 111.txt 1 qq1 1121 BBB3 1221 AAA2 BBB1 bbb

-u:显示仅出现一次的行(包括不是连续出现的重复行)

[root@localhost opt]# cat 111.txt 
qq
112
BBB
122
122
122
AAA
BBB
BBB
bbb
[root@localhost opt]# uniq -u 111.txt 
qq
112
BBB
AAA
bbb

-d :仅显示连续重复的行(不包括非连续出现的内容)

[root@localhost opt]# cat 111.txt 
qq
112
BBB
122
122
122
AAA
BBB
BBB
bbb
[root@localhost opt]# uniq -d 111.txt 
122
BBB

4、tr

tr:用来对标准输出的字符进行替换压缩和删除

格式:tr 选项 参数

-c: 保留字符集1的字符,其他的字符用字符集2进行替换

echo abc | tr -c ''ab 'a'输出结果: abaa

-d:删除字符集中的一部分

[root@localhost ~]# echo abc | tr -d 'ab'
c

-s:替换 把字符集1的部分替换成字符集2的部分,连续重复出现的字符压缩成一个字符串

[root@localhost ~]# echo aaabc | tr -s 'a'
abc
[root@localhost ~]# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
[root@localhost ~]# 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行
[root@localhost ~]# head -n 1 /etc/passwd | cut -d ':' -f 1-3
root:x:0
[root@localhost ~]# head -n 1 /etc/passwd | cut -d ':' -f 1,3
root:0
[root@localhost ~]# head -n 1 /etc/passwd 
root:x:0:0:root:/root:/bin/bash

-b:以字节为单位进行截取

-c :以字符为单位进行截取

-complement :输出的时候排除指定的字段

-output-delimiter:更改输出内容的分隔符

输出的时候以:分割符的不显示第2个
[root@localhost ~]# head -n 1 /etc/passwd | cut -d ':' --complement -f 1
x:0:0:root:/root:/bin/bash
[root@localhost ~]# head -n 1 /etc/passwd | cut -d ':' --output-delimiter='@' -f 1-5
root@x@0@0@root

五、split

split 大文件拆分成若干小的文件

-l :按行来进行分割

[root@localhost opt]# split -l 20 test1.txt 123   将test1.txt文件 按20进行分割

-b :按照大小来进行分割  

1、cat合并和paste合并有什么区别

cat合并是上下

paste是左右合并

[root@localhost opt]# cat 3.txt 
11111111111111
aaaaa
[root@localhost opt]# paste 1.txt 2.txt > 4.txt
[root@localhost opt]# cat 4.txt 
11111111111111	aaaaa

2、 统计当前主机的连接状态

[root@localhost 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文件中的电话号码

[root@localhost test1]# cat 2.txt | grep -E '(\([0-9]+\)|[0-9]+)[ -]?[0-9]+-[0-9]+'

小练习

 1、显示/etc/passwd中以sh结尾的行;

[root@localhost test1]# cat /etc/passwd | grep -E 'sh$'

 2、查找/etc/inittab中含有“以s开头,并以d结尾的单词”模式的行;

[root@localhost test1]# cat /etc/inittab | grep -E '(\bs[a-z]*d\b)'

3、查找ifconfig命令结果中的1-255之间的整数;

[root@localhost /]# 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的行;

[root@localhost test1]# cat /etc/passwd | grep -E 'bash$'

 5、高亮显示passwd文件中冒号,及其两侧的字符

[root@localhost 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、打印功能

打印内容
[root@localhost opt]# sed -n 'p' test1.txt
one
two
three
four
five
six
seven
eight
nine
ten

寻址打印

显示行号
[root@localhost opt]# sed -n '=' test1.txt 
1
2
3
4
5
6
7
8
9即显示行号,又显示内容
[root@localhost 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行
[root@localhost opt]# sed -n '4p' test1.txt
four

打印最后一行 $p

[root@localhost opt]# sed -n '$p' test1.txt
ten

行号范围打印  

从2行打印到末尾
[root@localhost opt]# sed -n '2,$p' test1.txt
two
three
four
five
six
seven
eight
nine
ten
打印第二行和第五行[root@localhost opt]# sed -n '2p;5p' test1.txt
two
five

打印奇数行和偶数行

奇数
[root@localhost opt]# sed -n 'p;n' test1.txt
one
three
five
seven
nine
偶数
[root@localhost opt]# sed -n 'n;p' test1.txt
two
four
six
eight
ten
#n的作用,跳过一行打印下一行

5、文本内容进行过滤

过滤并打印包含o 的行   /所要查找的内容/
[root@localhost opt]# sed -n '/o/p' test1.txt 
one
two
four
过滤并打印包含th的行
[root@localhost opt]# sed -n '/th/p' test1.txt 
three

 使用正则表达式对文本内容进行过滤

[root@localhost opt]# sed -n '/^root/p' /etc/passwd
root:x:0:0:root:/root:/bin/bash

从指定行开始,打印到第一个以bash为结尾的行

从第8行打印到第一个以bash为结尾的行
[root@localhost opt]# sed -n '8,/bash$/p' /etc/passwd

sed可使用的正则表达式 * .* {n,m} {n,}{,m} ? | () +  

要么以root为开头要么以bash为结尾
[root@localhost 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'删除
[root@localhost opt]# sed -i 'd' test1.txt

cat方式

cat /dev/null > test1.txt

7、 sed 的删除操作

删除指定行

删除第三行,并打印剩下的行
[root@localhost opt]# sed -n '3d;p' test1.txt 
one
two
four
five
six
sevend
eight
nine
ten
除了第三行其他都删除
[root@localhost opt]# sed -n '3!d;p' test1.txt 
three
除了第3行到第6行,其他都删除
[root@localhost opt]# sed -n '3,6!d;p' test1.txt 
three
four
five
six

匹配字符串的方式删除行

删除包含o的行
[root@localhost opt]# sed '/o/d' test1.txt 
three
five
six
seven
eight
nine
ten
删除从one到six的行
[root@localhost opt]# sed '/one/,/six/d' test1.txt 
seven
eight
nine
ten

 如何免交互的方式删除空行

[root@localhost opt]# cat test1.txt 
one
two
three
fourfive
six
seven
eight
nine
ten[root@localhost opt]# grep -v '^$' test1.txt
one
two
three
four
five
six
seven
eight
nine
ten[root@localhost opt]# cat test1.txt | tr -s '\n'
one
two
three
four
five
six
seven
eight
nine
ten[root@localhost opt]# sed '/^$/d' test1.txt 
one
two
three
four
five
six
seven
eight
nine
ten

8、主要功能:s替换字符串  

替换每行第一个root
[root@localhost 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
[root@localhost opt]# sed -n 's/root/test/2p' /etc/passwd
root:x:0:0:test:/root:/bin/bash
替换每行所有root
[root@localhost 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

添加#实现注释功能

注释所有行
[root@localhost opt]# sed -n 's/^/#/p' test1.txt 
#one
#two
#three
#four
#
#
#five
#six
#seven
#eight
#nine
#ten
注释4到5
[root@localhost opt]# sed -n '4,5 s/^/#/p' test1.txt 
#four
#
注释4和7行
[root@localhost opt]# sed -n '5 s/^/#/p;7 s/^/#/p' test1.txt 
#
#five

首字母变大写  

u& 转换首字母大写的特殊符合,\转义符

将首字母改为小写
[root@localhost opt]# sed 's/[a-z]/\u&/' test1.txt 
One
Two
Three
FourFive
Six
Seven
Eight
Nine
Ten将所有的字母都替换成大写s/[a-z]/\u&/g
[root@localhost opt]# sed 's/[a-z]/\u&/g' test1.txt 
ONE
TWO
THREE
FOURFIVE
SIX
SEVEN
EIGHT
NINE
TEN

 l&把大写转换成小写的特殊字符,\转义符

[root@localhost opt]# sed 's/[A-Z]/\l&/' test2.txt
aAAA
bB
cC
所有替换 s/[A-Z]/\l&/g
[root@localhost opt]# sed 's/[A-Z]/\l&/g' test2.txt
aaaa
bb
cc

 整行替换

[root@localhost 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

[root@localhost opt]# sed '/^IP/c IPADDR=192.168.10.100' /etc/sysconfig/network-scripts/ifcfg-ens33
TYPE=Ethernet
DEVICE=ens33
ONBOOT=yes
BOOTPROTO=static
#替换结果
IPADDR=192.168.10.100
NETMASK=255.255.255.0
GATEWAY=192.168.10.2
DNS1=218.2.135.1

y单字符替换  

将所有的t替换成1 w替换成2 o 替换成3
[root@localhost opt]# sed 'y/two/123/' test1.txt 
i 3ne
123
1hree
f3ur
five
six
seven
eigh1
nine
1en

10、 增加功能

#使用a在第3行的下一行插入一个zai
[root@localhost opt]# sed '3a zai' test1.txt 
i one
two
three
#新增显示内容
zai
four
five
six
seven
eight
nine
ten
#使用i在第5行的上一行插入一个ba
[root@localhost opt]# sed '5i ba' test1.txt 
i one
two
three
four
#新增显示内容
ba
five
six
seven
eight
nine
ten
#使用r将test2.txt的内容插入到test1.txt文件中two的下方
[root@localhost opt]# sed '/two/r test2.txt' test1.txt 
i one
two
#新增显示内容
AAAA
BB
CCthree
four
five
six
seven
eight
nine
ten
使用$a将内容插入在文本内容的最后一行
[root@localhost opt]# sed '$a zai' test1.txt 
i one
two
three
four
five
six
seven
eight
nine
ten
#新增显示内容
zai
使用$i将内容插入在文本内容的倒数第二行
[root@localhost opt]# sed '$i zai' test1.txt 
i one
two
three
four
five
six
seven
eight
nine#新增显示内容
zai
ten
使用$r将test2.txt的内容插入到test1.txt文件中最后一行
[root@localhost opt]# sed '$r test2.txt' test1.txt 
i one
two
three
four
five
six
seven
eight
nine
ten
AAAA
BB
CC

11、 sed进阶部分

使用sed对字符串和字符的位置进行互换

#字符串先进行分组,分组之后进行位置排序
[root@localhost opt]# echo ABC | sed -r 's/(A)(B)(C)/\1\3\2/'
ACB
[root@localhost opt]# echo ABC | sed -r 's/(A)(B)(C)/\3\1\2/'
CAB
[root@localhost opt]# echo ABC | sed -r 's/(A)(B)(C)/\2\1\3/'
BAC
[root@localhost opt]# echo zhangxiaoming | sed -r 's/(zhang)(xiao)(ming)/\3\1\2/'
mingzhangxiao对字符位置进行互换,先分组,使用.代替字符,也可以直接使用原字符,然后再进行排序
[root@localhost opt]# echo 猪小明 | sed -r 's/(.)(.)(.)/\3\2\1/'
明小猪

取出.jar之前的版本号 

[root@localhost 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[root@localhost opt]# cat test3.txt | grep -E '[0-9]+\.' 

使用grep命令 

 使用sed命令

#先进行分组,分成3个组  .*代表任意长度的字符串 版本号位于第二组 取出第2组即可
[root@localhost 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、 打印指定时间内的日志

[root@localhost 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 initrd=initrd.img method=ftp://192.168.10.20/centos7 ks=ftp://192.168.10.20/ks.cfglabel linux text
kernel vmlinuz
append initrd=initrd.img method=ftp://192.168.10.20/centos7
label linux rescue
kernel vmlinuz
append initrd=initrd.img method=ftp://192.168.10.20/centos7 
EOF#无人值守部分
yum -y install system-config-kickstart
cat > /var/ftp/ks.cfg <<EOF
#platform=x86, AMD64, or Intel EM64T
#version=DEVEL
install
keyboard 'us'
url --url="ftp://192.168.10.20/centos7"
lang zh_CN
auth  --useshadow  --passalgo=sha512
graphical
firstboot --disable
selinux --disabled
firewall --disabled
network  --bootproto=dhcp --device=ens33
reboot
timezone Asia/Shanghai
bootloader --location=mbr
zerombr
clearpart --all --initlabel
part /boot --fstype="xfs" --size=512
part /home --fstype="xfs" --size=4096
part swap --fstype="swap" --size=4096
part / --fstype="xfs" --grow --size=1
%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表示当前行的最后一个字段(几个字段)

FS:FS和F是一样的,都是指定分隔符,-F:FS=":"

OFS:指定输出内容的分隔符

RS:行分割符,可以根据RS的设置把文件内容切割成多个记录,也可以改变行的分隔符,默认是\n,回车,换行。

格式:

awk -F ‘操作符(动作)’处理对象

-F指定分隔符,如果是空格可以不加 动作:默认就是打印

[root@localhost opt]# awk '{print}' awk.txt   #print后没加东西,默认$0
one two three
four five six
eight nine ten
[root@localhost opt]# awk '{print  NR}' awk.txt #仅打印行号
1
2
3
4
[root@localhost opt]# awk '{print  NR,$0}' awk.txt  #不仅打印行号,也显示内容
1 one two three
2 four five six
3 eight nine ten
4  

打印指定行

[root@localhost opt]# awk 'NR==2{print}' awk.txt #打印指定的第2行
four five six
[root@localhost opt]# awk 'NR==2,NR==5{print}' awk.txt #打印2到5行
four five six
eight nine ten
a b c
d e f
[root@localhost opt]# awk 'NR==2;NR==5{print}' awk.txt #打印第2和第5行
four five six
d e f
[root@localhost opt]# awk 'NR%2==0{print}' awk.txt #打印偶数行
four five six
a b c
g h i
m i n
[root@localhost opt]# awk 'NR%2==1{print}' awk.txt #打印奇数行
one two three
eight nine ten
d e f
j k l

指定分隔符 -F+要分割符  

 #以:为分割符,查找1到3行的第3列
[root@localhost opt]# awk -F: 'NR==1,NR==3{print $3}' /etc/passwd
0
1
2
#打印第2行和第3行的第1列
[root@localhost opt]# awk -F: 'NR==2{print $1};NR==3{print $1}' /etc/passwd 
bin
daemon

3、awk怎么使用文本过滤

#过滤root,也可以使用正则表达式
[root@localhost opt]# awk '/root/{print}' /etc/passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin#正则表达式
[root@localhost 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连用
有初始条件
[root@localhost opt]# awk 'BEGIN{x=1};{x++};END{print x}' awk.txt 
9
#统计行数
[root@localhost opt]# awk 'BEGIN{x=0};{x++};END{print x}' awk.txt 
8
#单独使用BEGIN,一次性执行,不需要处理条件
#乘法
[root@localhost opt]# awk 'BEGIN{print 10*2}' awk.txt 
20
#幂运算
[root@localhost opt]# awk 'BEGIN{print 2**3}' awk.txt 
8
#次方
[root@localhost 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

结果  

[root@localhost opt]# sh awk.sh
输入第一个数2  
输入第二个数3
8

6、不常用选项,了解  

使用OFSS将:换成==
[root@localhost opt]# awk -v FS=":" -v OFS="==" '{print $1,$3}' /etc/passwd
root==0
bin==1
daemon==2
adm==3

7、 使用awk 进行条件判断打印

打印第三列大于999打印所有
[root@localhost opt]# awk -F: '$3>999{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,并打印所有
[root@localhost opt]# awk -F: '($3==1000){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语句?=if:=else;=fiif($3>$4)thenecho $3elseecho $4fi

9、 awk的精确筛选:

$n(<>==)用于比较数值

$n~"字符串" 表示该字段包含某个字符串

$n!~"字符串" 该字段不包含某个字符串

$n=="字符串" 该字段等于这个字符串

$n!="字符串" 该字段不等于这个字符串

$NF 代表最后一个字段

#打印第7列包含bash这个字段的行,取得是行的第一列和最后一列,以:作为分隔符
[root@localhost opt]# awk -F: '$7~"bash" {print $1,$NF}' /etc/passwd
#取出第1列,第2列,和第3列,没有范围表示的,只有什么和什么
[root@localhost 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的字符串,==后面跟着的必须是完整的字符串,错一个字符也不能匹配到
[root@localhost 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

逻辑且 $1=="dn"可以使用()括起来
[root@localhost opt]# awk -F: '$1=="dn" && $7=="/bin/bash" {print $1,$7}' /etc/passwd
dn /bin/bash
逻辑或
[root@localhost opt]# awk -F: '$1=="dn" || $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}')
取小数点后两位,但是会四舍五入
[root@localhost nginx]# echo $num
1.49
只取整数部分
[root@localhost nginx]# num=$(awk 'BEGIN{printf "%.F",1.222+1.222}')
[root@localhost nginx]# echo $num
2

 连续取出test1.txt文件中的域名部分

[root@localhost opt]# cat test1.txt 
1 www.kgc.com
2 mail.kgc.com
3 ftp.kgc.com
4 linux.kgc.com
5 blog.kgc.co主机名取出来
[root@localhost opt]# cat test1.txt | awk -F '[ .]+' '{print $2}'
www
mail
ftp
linux
blog

相关文章:

正则表达式以及文本三剑客grep、sed、awk

正则表达式匹配的是文本内容&#xff0c;文本三剑客都是针对文本内容。 grep&#xff1a;过滤文本内容 sed&#xff1a;针对文本内容进行增删改查 awk&#xff1a;按行取列 一、grep grep的作用使用正则表达式来匹配文本内容 1、grep选项 -m&#xff1a;匹配几次之后停止…...

HSRP热备份路由协议(VRRP虚拟路由冗余协议)配置以及实现负载均衡

1、相关原理 在网络中&#xff0c;如果一台作为默认网关的三层交换机或者路由器损坏&#xff0c;所有使用该网关为下一跳的主机通信必然中断&#xff0c;即使配置多个默认网关&#xff0c;在不重启终端的情况下&#xff0c;也不能彻底换到新网关。Cisco提出了HSRP热备份路由协…...

不同集成学习算法的比较:随机森林、AdaBoost、XGBoost、LightGBM

好的&#xff0c;我来为您比较一些常见的集成学习算法&#xff0c;并生成表格形式以便于对比&#xff1a; 算法主要思想和特点应用场景并行处理支持稳定性和鲁棒性主要优化策略和技术AdaBoost使用加权投票组合多个弱分类器&#xff0c;逐步提升分类器性能二分类和多分类问题&a…...

【聊聊原子性,中断,以及nodejs中的具体示例】

什么是原子性 从一个例子说起&#xff0c; x &#xff0c;读和写 &#xff0c; 如图假设多线程&#xff0c;线程1和线程2同时操作变量x&#xff0c;进行x的操作&#xff0c;那么由于写的过程中&#xff0c;都会先读一份x数据到cpu的寄存器中&#xff0c;所以这个时候cpu1 和 c…...

常见网络端口号

在网络工程领域&#xff0c;了解和掌握默认端口号是至关重要的。端口号是计算机网络中最基本的概念之 一&#xff0c;用于标识特定的网络服务或应用程序。 1、什么是端口号&#xff1f; 端口号是计算机网络中的一种标识&#xff0c;用于区分不同的网络服务和应用程序。每个端…...

【数值计算库-超长笔记】Python-Mpmath库:高精度数值计算

原文链接&#xff1a;https://www.cnblogs.com/aksoam/p/18279394 更多精彩&#xff0c;关注博客园主页&#xff0c;不断学习&#xff01;不断进步&#xff01; 我的主页 csdn很少看私信&#xff0c;有事请b站私信 博客园主页-发文字笔记-常用 有限元鹰的主页 内容&#xf…...

昇思25天学习打卡营第6天|函数式自动微分

函数式自动微分 相关前置知识复习 深度学习的重点之一是神经网络。而神经网络很重要的一环是反向传播算法&#xff0c;这个算法用于调整神经网络的权重。 反向传播算法 这里举例说明反向传播在做什么。 假设你是一个学生&#xff0c;一次考试过后&#xff0c;你收到了一份老…...

作业7.2

用结构体数组以及函数完成: 录入你要增加的几个学生&#xff0c;之后输出所有的学生信息 删除你要删除的第几个学生&#xff0c;并打印所有的学生信息 修改你要修改的第几个学生&#xff0c;并打印所有的学生信息 查找你要查找的第几个学生&#xff0c;并打印该的学生信息 1 /*…...

PCL 点云聚类(基于体素连通性)

文章目录 一、简介二、实现代码三、实现效果参考资料一、简介 这里的思路很简单,我们通过将点云转换为体素,基于体素的连通性实现对点云的聚类(有点类似于欧式聚类),不过这种方式进行的聚类有些粗糙,但聚类速度相对会快很多,具体的实现效果可以详细阅读代码。 二、实现代…...

python自动化运维--DNS处理模块dnspython

1.dnspython介绍 dnspython是Pyhton实现的一个DNS工具包&#xff0c;他几乎支持所有的记录类型&#xff0c;可以用于查询、传输并动态更新ZONE信息&#xff0c;同事支持TSIG&#xff08;事物签名&#xff09;验证消息和EDNS0&#xff08;扩展DNS&#xff09;。在系统管理方面&a…...

成人职场商务英语学习柯桥外语学校|邮件中的“备注”用英语怎么说?

在英语中&#xff0c;"备注"通常可以翻译为"Notes" 或 "Remarks"。 这两个词在邮件中都很常用。例如: 1. Notes Notes: 是最通用和最常见的表达&#xff0c;可以用在各种情况下&#xff0c;例如&#xff1a; 提供有关电子邮件内容的附加信息 列…...

AndroidStudio报错macMissing essential plugin

电脑重启后打开studio&#xff1a; Missing essential plugin: org.jetbrains.android Please reinstall Android Studio from scratch. 无法使用 对应Mac下disabled_plugins.txt位于如下目录&#xff1a; /Users/ACB/Library/Application Support/Google/AndroidStudio4.2 …...

doris集群物理部署保姆级教程

doris物理安装 1、安装要求 Linux 操作系统版本需求​ 查看CentOs版本(>7.1) cat /etc/redhat-release 1&#xff09;设置系统最大打开文件句柄数​ vi /etc/security/limits.conf soft nofile 65536hard nofile 65536 echo ‘’’ soft nofile 655360hard nofile 655…...

探囊取物之多形式登录页面(基于BootStrap4)

基于BootStrap4的登录页面&#xff0c;支持手机验证码登录、账号密码登录、二维码登录、其它统一登录 低配置云服务器&#xff0c;首次加载速度较慢&#xff0c;请耐心等候&#xff1b;演练页面可点击查看源码 预览页面&#xff1a;http://www.daelui.com/#/tigerlair/saas/pr…...

【ONLYOFFICE】| 桌面编辑器从0-1使用初体验

目录 一. &#x1f981; 写在前面二. &#x1f981; 在线使用感受2.1 创建 ONLYOFFICE 账号2.2 编辑pdf文档2.3 pdf直接创建表格 三. &#x1f981; 写在最后 一. &#x1f981; 写在前面 所谓桌面编辑器就是一种用于编辑文本、图像、视频等多种自媒体的软件工具&#xff0c;具…...

20、PHP字符串的排列(含源码)

题目&#xff1a; PHP字符串的排列&#xff1f; 描述&#xff1a; 输入一个字符串,按字典序打印出该字符串中字符的所有排列。 例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。 输入描述&#xff1a; 输入一个字符串,长度不超过9(可…...

Linux 标准IO的fopen和fclose

getchar(),putchar() ‐‐‐‐ 一个字符 gets(buf),puts(buf) ‐‐‐‐ 一串字符 scanf(),printf() ‐‐‐‐ 一个字符&#xff0c;一串字符都可以 fopen函数的形式 FILE * fopen(constchar *path , cost char *mode) /* * description : 打开一个文件 * param ‐ path…...

一个计算密集小程序在不同CPU下的表现

本文比较了几款CPU对同一测试程序的比较结果&#xff0c;用的是Oracle公有云OCI上的计算实例&#xff0c;均分配的1 OCPU&#xff0c;内存用的默认值&#xff0c;不过内存对此测试程序运行结果不重要。 本文只列结果&#xff0c;不做任何评价。下表中&#xff0c;最后一列为测…...

圈子系统搭建教程,以及圈子系统的功能特点,圈子系统,允许二开,免费源码,APP小程序H5

圈子是一款社区与群组的交友工具。你可以在软件内创造一个兴趣的群组从而达到按圈子来交友的效果用户可以根据自己的兴趣爱好。 1. 创建圈子 轻松创建专属圈子&#xff0c;支持付费型社群。 2. 加入圈子 加入不同圈子&#xff0c;设置不同名片&#xff0c;保护隐私。 3. 定…...

递归算法练习

112. 路径总和 package Tree;import java.util.HashMap; import java.util.Map;class TreeNode {int val;TreeNode left;TreeNode right;public TreeNode(int val) {this.val val;} }/*** 求 树的路径和* <p>* 递归 递减* <p>* 询问是否存在从*当前节点 root 到叶…...

WebDriver 类的常用属性和方法

目录 &#x1f38d;简介 &#x1f38a;WebDriver 核心概念 &#x1f389;WebDriver 常用属性 &#x1f381;WebDriver 常用方法 &#x1f437;示例代码 &#x1f3aa;注意事项 &#x1f390;结语 &#x1f9e3;参考资料 &#x1f38d;简介 Selenium WebDriver 是一个用…...

基于x86+FPGA+AI轴承缺陷视觉检测系统,摇枕弹簧智能检测系统

一、承缺陷视觉检测系统 应用场景 轴类零件自动检测设备&#xff0c;集光、机、软件、硬件&#xff0c;智能图像处理等先进技术于一体&#xff0c;利用轮廓特征匹配&#xff0c;目标与定位&#xff0c;区域选取&#xff0c;边缘提取&#xff0c;模糊运算等算法实现人工智能高…...

短剧小程序系统cps分销开发搭建

短剧小程序系统CPS分销开发搭建是一个相对复杂但具有广阔商业前景的过程。以下是关于短剧小程序系统CPS分销开发搭建的详细步骤和要点&#xff1a; 需求分析与市场调研&#xff1a; 深入了解市场需求、用户画像和竞品分析&#xff0c;明确产品定位和功能需求。研究目标用户的消…...

代理IP的10大误区:区分事实与虚构

在当今的数字时代&#xff0c;代理已成为在线环境不可或缺的一部分。它们的用途广泛&#xff0c;从增强在线隐私到绕过地理限制。然而&#xff0c;尽管代理无处不在&#xff0c;但仍存在许多围绕代理的误解。在本博客中&#xff0c;我们将探讨和消除一些最常见的代理误解&#…...

数组-长度最小的子数组

M长度最小的子数组&#xff08;leetcode209&#xff09; /*** param {number} target* param {number[]} nums* return {number}*/ var minSubArrayLen function(target, nums) {const n nums.length;let ans n 1;let sum 0; // 子数组元素和let left 0; // 子数组…...

深度学习之交叉验证

交叉验证&#xff08;Cross-Validation&#xff09;是一种用于评估和验证机器学习模型性能的技术&#xff0c;尤其是在数据量有限的情况下。它通过将数据集分成多个子集&#xff0c;反复训练和测试模型&#xff0c;以更稳定和可靠地估计模型的泛化能力。常见的交叉验证方法有以…...

使用 Python 五年后,我发现学 python 必看这三本书!少走一半弯路

第一本 《Python编程-从入门到实践》 适合零基础的读者 豆瓣评分&#xff1a;9.1 推荐指数&#xff1a;5颗星 推荐理由&#xff1a; 本书是针对所有层次的 Python 读者而作的 Python 入门书。全书分为两部分&#xff1a; 第一部分介绍使用Python 编程所必须了解的…...

React@16.x(45)路由v5.x(10)源码(2)- history

目录 1&#xff0c;作用1.1&#xff0c;createBrowserHistory1.2&#xff0c;createHashHistory1.3&#xff0c;createMemoryHistory 2&#xff0c;history 对象的属性2.1&#xff0c;action2.2&#xff0c;push / replace / go / goBack / goForward2.3&#xff0c;location2.…...

grpc学习golang版( 八、双向流示例 )

系列文章目录 第一章 grpc基本概念与安装 第二章 grpc入门示例 第三章 proto文件数据类型 第四章 多服务示例 第五章 多proto文件示例 第六章 服务器流式传输 第七章 客户端流式传输 第八章 双向流示例 文章目录 一、前言二、定义proto文件三、编写server服务端四、编写client客…...

SpringBoot学习05-[SpringBoot的嵌入式Servlet容器]

SpringBoot的嵌入式Servlet容器 嵌入式Servlet容器servlet容器-嵌入式servlet容器配置修改通过全局配置文件修改修改添加实现了WebServerFactoryCustomizer接口的bean来进行修改 servlet容器-注册servlet三大组件应该如何注册呢&#xff1f;servlet3.0规范提供的注解方式进行注…...

查看Oracle是哪个Oracle_home 下启动的

[rootrac1 ~]# ps -ef|grep smon root 413 24903 0 22:30 pts/0 00:00:00 grep --colorauto smon root 27165 1 0 22:11 ? 00:00:09 /u01/app/19.0.0/grid/bin/osysmond.bin grid 27784 1 0 22:12 ? 00:00:00 asm_smon_ASM1 oracl…...

重温react-06(初识函数组件和快速生成格式的插件使用方式)

开始 函数组件必然成为未来发展的趋势(个人见解),总之努力的去学习,才能赚更多的钱.加油呀! 函数组件的格式 import React from reactexport default function LearnFunction01() {return (<div>LearnFunction01</div>) }以上是函数式组件的组基本的方式 快捷生…...

【高考志愿】仪器科学与技术

目录 一、专业介绍 1.1 专业概述 1.2 专业方向 1.3 主要课程 二、专业技能与素质培养 三、就业前景 四、个人发展规划建议 五、仪器科学与技术专业排名 六、总结 一、专业介绍 1.1 专业概述 仪器科学与技术专业是一门综合性极强的学科&#xff0c;它融合了测量、控制…...

Elasticsearch的Mapping

Elasticsearch的Mapping Mapping是什么 Mapping定义了ES的索引结构、字段类型、分词器等&#xff0c;是索引的一部分。类似于关系型数据库中“表结构”的概念&#xff0c;在 Mapping 里也包含了一些属性&#xff0c;比如字段名称、类型、字段使用的分词器、是否评分、是否创建…...

【vocabulary in use (elementary)】6 Health and Illness

very well / fine 很好 ill sick 生病 I feel terrible 感觉很差 headache 头疼 toothache 牙疼 dentist medicine 药 pills 片药 caps 胶囊 aspirin 阿司匹林 antibiotic 抗生素 vitamin 维生素 painkiller 止痛药 dentist 牙医 got a cold 感冒 for many years 很多年 all th…...

探囊取物之多形式注册页面(基于BootStrap4)

基于BootStrap4的注册页面&#xff0c;支持手机验证码注册、账号密码注册 低配置云服务器&#xff0c;首次加载速度较慢&#xff0c;请耐心等候&#xff1b;演练页面可点击查看源码 预览页面&#xff1a;http://www.daelui.com/#/tigerlair/saas/preview/ly4gax38ub9j 演练页…...

【C++进阶学习】第五弹——二叉搜索树——二叉树进阶及set和map的铺垫

二叉树1&#xff1a;深入理解数据结构第一弹——二叉树&#xff08;1&#xff09;——堆-CSDN博客 二叉树2&#xff1a;深入理解数据结构第三弹——二叉树&#xff08;3&#xff09;——二叉树的基本结构与操作-CSDN博客 二叉树3&#xff1a;深入理解数据结构第三弹——二叉树…...

【RabbitMQ实战】Springboot 整合RabbitMQ组件,多种编码示例,带你实践 看完这一篇就够了

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、对RabbitMQ管理界面深入了解1、在这个界面里面我们可以做些什么&#xff1f; 二、编码练习&#xff08;1&#xff09;使用direct exchange(直连型交换机)&a…...

【你也能从零基础学会网站开发】理解DBMS数据库管理系统架构,从用户到数据到底经历了什么

&#x1f680; 个人主页 极客小俊 ✍&#x1f3fb; 作者简介&#xff1a;程序猿、设计师、技术分享 &#x1f40b; 希望大家多多支持, 我们一起学习和进步&#xff01; &#x1f3c5; 欢迎评论 ❤️点赞&#x1f4ac;评论 &#x1f4c2;收藏 &#x1f4c2;加关注 其实前面我们也…...

Vue.js 中的API接口封装实战与详解

在开发Web应用的过程中&#xff0c;我们常常需要和服务器进行数据交互&#xff0c;这就涉及到了API接口的调用。在Vue.js项目中&#xff0c;为了提高代码复用性、可维护性和降低错误率&#xff0c;我们将API接口进行合理的封装显得尤为重要。本文将详细介绍如何在Vue.js项目中实…...

职场内卷、不稳定、没前景……怎么破?

经济下行期&#xff0c;大家普遍反映混职场艰难。 再深究下&#xff0c;发现造成职场艰难的原因主要有三个&#xff1a; 1.内卷&#xff1a;狼多肉少 2.不稳定&#xff1a;裁员总是不期而遇 3.没前景&#xff1a;明知过几年会被优化&#xff0c;但无法改变&#xff0c;死气沉沉…...

LeetCode 算法:将有序数组转换为二叉搜索树 c++

原题链接&#x1f517;&#xff1a;将有序数组转换为二叉搜索树 难度&#xff1a;简单⭐️ 题目 给你一个整数数组 nums &#xff0c;其中元素已经按 升序 排列&#xff0c;请你将其转换为一棵 平衡 二叉搜索树。 示例 1&#xff1a; 输入&#xff1a;nums [-10,-3,0,5,9]…...

智慧公厕系统改变了人们对服务区公厕的看法

在过去&#xff0c;服务区公厕常常给人留下脏乱差的印象&#xff0c;成为人们在长途旅行途中不愿停留的地方。然而&#xff0c;随着智慧科技的不断发展和应用&#xff0c;智慧公厕系统的出现改变了人们对服务区公厕的看法&#xff0c;为公共卫生设施的提升注入了新的活力。 一、…...

终极指南:RNNS、Transformers 和 Diffusion 模型

一、说明 作为广泛使用这些工具和模型的人&#xff0c;我的目标是解开 RNN、Transformer 和 Diffusion 模型的复杂性和细微差别&#xff0c;为您提供详细的比较&#xff0c;为您的特定需求提供正确的选择。 无论您是在构建语言翻译系统、生成高保真图像&#xff0c;还是处理时间…...

WPF UI 3D 基本概念 点线三角面 相机对象 材质对象与贴图 3D地球 光源 变形处理 动作交互 辅助交互插件 系列三

WPF UI交互专题 平面图形 Path Drawing 绘图 渐变 Brush 矩阵 Transform 变形 阴影效果 模糊效果 自定义灰度去色效果 系列二-CSDN博客 1软件中的3D基本概念 WPF 中 3D 功能的设计初衷并非提供功能齐全的游戏开发平台。 WPF 中的 3D 图形内容封装在 Viewport3D 元素中&#x…...

分子AI预测赛Task2笔记

下面所述比较官方的内容都来自官方文档 ‍‌⁠‌‍​​​‌​​⁠​​​​​&#xfeff;​​​&#xfeff;‍‬​​‍⁠‍‍​​‬​&#xfeff;‌​​​‌‍‬​​​​​​‍‌Task2&#xff1a;赛题深入解析 - 飞书云文档 (feishu.cn) 赛题背景 强调了人工智能在科研领域&…...

剖析DeFi交易产品之UniswapV4:创建池子

本文首发于公众号&#xff1a;Keegan小钢 创建池子的底层函数是 PoolManager 合约的 initialize 函数&#xff0c;其代码实现并不复杂&#xff0c;如下所示&#xff1a; function initialize(PoolKey memory key, uint160 sqrtPriceX96, bytes calldata hookData)externalover…...

速盾:cdn内容分发服务有哪些优势?

CDN&#xff08;Content Delivery Network&#xff09;是指内容分发网络&#xff0c;是一种将网络内容分发到全球各个地点的技术和架构。在现代互联网架构中&#xff0c;CDN已经变得非常重要。CDN通过将内容分发到靠近用户的服务器上&#xff0c;提供高速、高效的服务。下面是C…...

如何利用React和Python构建强大的网络爬虫应用

如何利用React和Python构建强大的网络爬虫应用 引言&#xff1a; 网络爬虫是一种自动化程序&#xff0c;用于通过互联网抓取网页数据。随着互联网的不断发展和数据的爆炸式增长&#xff0c;网络爬虫越来越受欢迎。本文将介绍如何利用React和Python这两种流行的技术&#xff0c…...

炎黄数智人:招商局集团推出AI数字员工“招小影”

引言 在全球数字化浪潮的推动下&#xff0c;招商局集团开启了一项具有里程碑意义的项目。招商局集团将引入AI数字员工“招小影”&#xff0c;这一举措不仅彰显了招商局集团在智能化转型方面的坚定决心&#xff0c;也为企业管理模式的创新注入了新的活力。 “招小影”是一款集成…...

Go高级库存照片源码v5.3

GoStock – 免费和付费库存照片脚本这是一个免费和付费共享高质量库存照片的平台,用户可以上传照片与整个社区和访客分享,并可以通过 PayPal 接收捐款。此外,用户还可以点赞、评论、分享和收藏您最喜欢的照片。 下载 特征: 使用Laravel 10构建订阅系统Stripe 连接渐进式网页…...

tongweb 部署软航流版签一体化应用示例 提示跨域错误CORS ERROR

目录 问题现象与描述 解决办法 原理解析 什么是CORS 浏览器跨域请求限制 跨域问题解决方法 跨域请求流程 浏览器请求分类解析 http请求方法简介 问题现象与描述 重庆软航科技有限公司提供了一套针对针对word、excel等流式文件转换成PDF版式文件并进行版式文件在线签章…...

转运机器人帮助物流行业实现无人化运输,自动分拣

在物流行业日新月异的今天&#xff0c;智能化、无人化已成为大势所趋。富唯智能转运机器人凭借其卓越的性能和广泛的应用场景&#xff0c;正引领着物流行业的新一轮变革。 1、高效转运&#xff0c;轻松应对 富唯智能转运机器人&#xff0c;拥有高达1000kg的负载能力&#xff…...

14-38 剑和诗人12 - RAG+ 思维链 ⇒ 检索增强思维(RAT)

在快速发展的 NLP 和 LLM 领域&#xff0c;研究人员不断探索新技术来增强这些模型的功能。其中一种备受关注的技术是检索增强生成 (RAG) 方法&#xff0c;它将 LLM 的生成能力与从外部来源检索相关信息的能力相结合。然而&#xff0c;最近一项名为检索增强思维 (RAT) 的创新通过…...

Laravel全尺寸表单:简化Web开发中的表单处理

引言 Laravel是一个功能丰富的PHP Web框架&#xff0c;它提供了许多工具来简化开发过程&#xff0c;包括处理表单数据。Laravel的全尺寸表单功能允许开发者轻松创建、验证和管理表单数据&#xff0c;同时保持代码的简洁性和可维护性。本文将深入探讨Laravel全尺寸表单的工作机…...

git reset 和 git revert区别

git reset 和 git revert 是两个用于撤销提交历史的 Git 命令&#xff0c;它们的主要区别在于&#xff1a; 1、git reset&#xff1a; 作用&#xff1a;用于将当前分支的 HEAD 指针移动到另一个位置&#xff0c;通常是将其重置到之前的提交上。影响&#xff1a;重置会修改历史…...

20万买合资B级车,英仕派对比凯美瑞,究竟谁更胜一筹?

提到合资B级车,丰田凯美瑞往往是选车清单上绕不开的车型。不管是市场销量还是关注热度,凯美瑞用实力证明它才是这个级别市场的常青树。随着市场竞争更加激烈,比凯美瑞更优秀的车型不断涌现。就拿这辆东风本田英仕派燃油版来说,它除了有着一套好看的外观颜值以外,还有着不错…...

产品力拉满的领克07EM-P,誓做20万内最强的混动轿车

在刚刚过去的4月,领克品牌销量18727辆,同比增长34%。在竞争激烈的国内汽车市场中,领克品牌能够取得这样的成绩着实不易。凭借EM-P超级增程电动方案、多维智联的智能座舱以及全域安全设计理念,领克07 EM-P在成为细分市场标杆车型的同时,将成为领克品牌新的销量助推剂,帮助…...

嘉兴燃气09908与嘉兴管网公司订立天然气供应框架协议

智通财经APP讯,嘉兴燃气发布公告,于2024年5月23日,该公司(作为供应商)与嘉兴管网公司作为(作为买方)订立天然气供应框架协议。根据天然气供应框架协议,嘉兴管网公司与该公司可不时就该公司于2024年5月23日至2027年3月31日期间向嘉兴管网公司供应天然气订立最终协议,惟须遵…...

非量表题如何进行信效度分析

效度是指设计的题确实在测量某个东西&#xff0c;一般问卷中使用到。如果是量表类的数据&#xff0c;其一般是用因子分析这种方法去验证效度水平&#xff0c;其可通过因子分析探究各测量量表的内部结构情况&#xff0c;分析因子分析得到的内部结构与自己预期的内部结构进行对比…...

计算机三级 网络技术

一、边界网关协议BGP BGP是边界网关协议&#xff0c;是外部而不是内部网关协议&#xff08;是不同自治系统的路由器之间使用的协议&#xff09;一个BGP发言人使用TCP&#xff08;不是UDP&#xff09;与其自治系统的BGP发言人交换路由信息。BGP协议交换路由由信息的节点数是以自…...

rk3568_mutex

文章目录 前言1、什么是mutex?1.1mutex互斥体API函数二、实验2.1实验目的2.2源码2.3结果图前言 本文记录的是rk3568开发板基础上做的mutex实验 1、什么是mutex? mutex是互斥体,它是比信号量semaphore更加专业的机制。 在我们编写Linux驱动的时候遇到需要互斥的地方建议使用…...