小阿轩yx-Shell编程之正则表达式与文本处理器

小阿轩yx-Shell编程之正则表达式与文本处理器

正则表达式

RegularExpressionRE

正则表达式概述 

正则表达式的定义

又称

  • 正规表达式
  • 常规表达式

代码中常简写为 regexregexp 或 RE

正则表达式
  • 使用单个字符串来描述、匹配一系列符合某个句法规则的字符串
  • 简单来说, 是一种匹配字符串的方法,通过一些特殊符号,实现快速查找、删除、替换某个特定字符串
  • 由普通字符与元字符组成的文字模式。模式用于描述搜索文本时要匹配的一个或多个字符串。
  • 作为一个模板,将某个字符模式与所搜索的字符串进行匹配。
  • 其中普通字符包括大小写字母、数字、标点符号及一些其他符号
  • 元字符则是指那些在正则表达式中具有特殊意义的专用字符,可以用来规定其前导字符(即位于元字符 前面的字符)在目标对象中的出现模式
  • 一般用于脚本编程与文本编辑器中,很多文本处理器与程序设计语言均支持

正则表达式用途

  • 计算机用户用的不多
  • 对于系统管理员则是必备技能之一,是非常重要的
                系统运行过程中会产生非常重要的大量信息,有些则仅是告知的信息
  • 快速提取“有问题的信息,可以将运维工作变得更加简单、 方便
很多软件支持正则表达式,常见于邮件服务器
很多服务器软件也支持正则表达式

基础正则表达式

  • 基本正则表达式:常用正则表达式最基础的部分,处理工具grep与sed支持基础正则表达式
  • 扩展正则表达式:egrep与awk支持扩展正则表达式

grep

  • -a 不要忽略二进制数据
  • -A<显示列数> 除了显示符合范本样式的那一行之外,并显示该行之后的内容
  • -b 在显示符合范本样式的那一行之外,并显示该行之前的内容
  • -c 计算符合范本样式的列数
  • -C<显示列数>或-<显示列数>  除了显示符合范本样式的那一列之外,并显示该列之前后的内容
  • -d<进行动作> 当指定要查找的是目录而非文件时,必须使用这项参数,否则grep命令将回报信息并停止动作。-e<范本样式> 指定字符串作为查找文件内容的范本样式\
  • -E 将范本样式为延伸的普通表示法来使用,意味着使用能使用扩展正则表达式
  • -f<范本文件> 指定范本文件,其内容有一个或多个范本样式,让grep查找符合范本条件的文件内容,格式为每一列的范本样式
  • -F 将范本样式视为固定字符串的列表
  • -G 将范本样式视为普通的表示法来使用
  • -h 在显示符合范本样式的那一列之前,不标示该列所属的文件名称
  • -H 在显示符合范本样式的那一列之前,标示该列的文件名称
  • -i 忽略字符大小写的差别
  • -l 列出文件内容符合指定的范本样式的文件名称
  • -L 列出文件内容不符合指定的范本样式的文件名称
  • -n 在显示符合范本样式的那一列之前,标示出该列的编号
  • -q 不显示任何信息
  • -R/-r 此参数的效果和指定“-d recurse”参数相同
  • -s 不显示错误信息
  • -v 反转查找
  • -w 只显示全字符合的列
  • -x 只显示全列符合的列
  • -y 此参数效果跟“-i”相同
  • -o 只输出文件中匹配到的部分

创建测试文件

[root@localhost ~]# cat test.txt 
he was short and fat.
he was weating a blue polo shirt with black pants.
The home of Football on BBC Sport online.
the tongue is boneless but it breaks bones.12!
google is the best tools for search keyword.
PI=3.14
a wood cross!
Actions speak louder than words#woood #
#woooooooood #
AxyzxyzxyzxyzC
I bet this place is really spooky late at night!
Misfortunes never come alone/single.
I shouldn't have lett so tast.

查找特定字符

查看包含 the 的行

[root@localhost ~]# grep -ni 'the' test.txt
3:The home of Football on BBC Sport online.
4:the tongue is boneless but it breaks bones.12!
5:google is the best tools for search keyword.

-n:显示行号

-i:不区分大小写

-v:不包含指定字符

利用 [] 查找集合字符

[root@localhost ~]# grep -n 'sh[io]rt' test.txt 
1:he was short and fat.
2:he was weating a blue polo shirt with black pants.

[ ]:中括号内不管写几个字符,都只匹配一个,表示匹配其中的任何一个字符

查找字母 oo 前不是字母 w 的内容

[root@localhost ~]# grep -n '[^w]oo' test.txt 
3:The home of Football on BBC Sport online.
5:google is the best tools for search keyword.
9:#woood #
10:#woooooooood #
12:I bet this place is really spooky late at night!

查看字母 oo 前不是小写字母的内容

[root@localhost ~]# grep -n '[^a-z]oo' test.txt 
3:The home of Football on BBC Sport online.

(注:字母前直接用^,表示取反 [   ] 前用^,表示以括号中的字符开头)

查找行首与行位

查看以 the 为行首的行

[root@localhost ~]# grep -n '^the' test.txt 
4:the tongue is boneless but it breaks bones.12!

查询以小写字母开头的行

[root@localhost ~]# grep -n '^[a-z]' test.txt
1:he was short and fat.
2:he was weating a blue polo shirt with black pants.
4:the tongue is boneless but it breaks bones.12!
5:google is the best tools for search keyword.
7:a wood cross!

查询以大写字母开头的行

[root@localhost ~]# grep -n '^[A-Z]' test.txt 
3:The home of Football on BBC Sport online.
6:PI=3.14
8:Actions speak louder than words
11:AxyzxyzxyzxyzC
12:I bet this place is really spooky late at night!
13:Misfortunes never come alone/single.
14:I shouldn't have lett so tast.

查看以非字母开头的行

[root@localhost ~]# grep -n '^[^a-zA-Z]' test.txt 
9:#woood #
10:#woooooooood #

查看以点结尾的行

[root@localhost ~]# grep -n '\.$' test.txt 
1:he was short and fat.
2:he was weating a blue polo shirt with black pants.
3:The home of Football on BBC Sport online.
5:google is the best tools for search keyword.
13:Misfortunes never come alone/single.
14:I shouldn't have lett so tast.

查询空行

[root@localhost ~]# grep -n '^$' test.txt

查询非空行

[root@localhost ~]# grep -n -v '^$' test.txt

查找任意字符和重复字符

查找包含四字符的单词的行,单词以w开头,以d结尾

[root@localhost ~]# grep -n 'w..d' test.txt 
5:google is the best tools for search keyword.
7:a wood cross!
8:Actions speak louder than words

(注:一个点代表一个字符)

查询至少包含两个字母o(oo)字符串的行

[root@localhost ~]# grep -n 'ooo*' test.txt 
3:The home of Football on BBC Sport online.
5:google is the best tools for search keyword.
7:a wood cross!
10:#woood #
11:#woooooooood #
13:I bet this place is really spooky late at night!

(注:ooo*:前两个o是条件,表示包含两个o;然后是o*,表示后面有零个或多个重复o)

查找行,行中单词包含w开头和d结尾,中间至少一个字母o

[root@localhost ~]# grep -n 'woo*d' test.txt 
7:a wood cross!
10:#woood #
11:#woooooooood #

查询以w开头,d结尾,中间字符可有可无

[root@localhost ~]# grep -n 'w.*d' test.txt 
1:he was short and fat.
5:google is the best tools for search keyword.
7:a wood cross!
8:Actions speak louder than words
10:#woood #
11:#woooooooood #

查询包含数字的行

[root@localhost ~]# grep -n '[0-9][0-9]*' test.txt 
4:the tongue is boneless but it breaks bones.12!
6:PI=3.14

查找连续字符范围

查询包含两个o的字符

[root@localhost ~]# grep -n 'o\{2\}' test.txt 
3:The home of Football on BBC Sport online.
5:google is the best tools for search keyword.
7:a wood cross!
10:#woood #
11:#woooooooood #
13:I bet this place is really spooky late at night!

(注:'o\{2\}':表示两个字母o)

w开头,d结尾中间有2--5个o

[root@localhost ~]# grep -n 'wo\{2,5\}d' test.txt 
7:a wood cross!
10:#woood #

w开头,d结尾中间有2个以上o

[root@localhost ~]# grep -n 'wo\{2,\}d' test.txt 
7:a wood cross!
10:#woood #
11:#woooooooood #

扩展正则表达式

[root@localhost ~]# grep -v '^$' /etc/ssh/sshd_config | grep -v '^#'

用扩展正则表达式表示

基础正则表达式包含两个定位元字符

  • “^”(行首)
  • “$”(行尾)

扩展正则表达式

好处

  • 简化整个指令

文本处理器

Shell编程三剑客

  • grep
  • sed
  • awk
(注:Shell 编程中经常用到的文本处理工具)

sed工具文本解析转换工具

sed (Stream EDitor)
优点
  • 强大
  • 简单
  • 可以读取文本,并根据指定的条件对文本内容进行编辑(删除、替换、添加、移动等),最后输出所有行或者仅输出处理的某些行
  • 可以在无交互的情况下实现相当复杂的文本处理操作
广泛应用于 Shell 脚本中,完成各种自动化处理任务
工作流程包括
  • 读取:sed 从输入流(文件、管道、标准输入)中读取一行内容并存储到临时的缓冲区中(又称模式空间,pattern space)。
  • 执行:默认情况下,所有的 sed 命令都在模式空间中顺序地执行,除非指定了行的地址,否则 sed 命令将会在所有的行上依次执行。
  • 显示:发送修改后的内容到输出流。在发送数据后,模式空间将会被清空。
sed 命令常见用法

sed 命令两种格式

sed [选项] '操作' 参数
sed [选项] -f scriptfile 参数

“参数”指操作的目标文件,当存在多个操作对象时用,文件之间用逗号分隔

scriptfile表示脚本文件,需要用“-f”选项指定,当脚本文件出现在目标文件之前时,表示通过指定的脚本文件来处理输入的目标文件

sed 常用选项

  • -n :使用安静(silent)模式。在一般 sed 的用法中,所有来自 STDIN 的数据一般都会被列出到终端上。但如果加上 -n 参数后,则只有经过sed 特殊处理的那一行(或者动作)才会被列出来
  • -e :直接在命令列模式上进行 sed 的动作编辑
  • -f :直接将 sed 的动作写在一个文件内, -f filename 则可以运行 filename 内的 sed 动作
  • -r :sed 的动作支持的是延伸型正规表示法的语法。(默认是基础正规表示法语法)
  • -i :直接修改读取的文件内容,而不是输出到终端
常见的 sed 命令选项主要包含
  • -e --expression=:表示用指定命令或者脚本来处理输入的文本文件。
  • -f --file=:表示用指定的脚本文件来处理输入的文本文件。
  • -h --help:显示帮助。
  • -n--quiet silent:表示仅显示处理后的结果。
  • -i:直接编辑文本文件。
操作需要在 5~ 20 行之间进行,则表示为“520 动作行为。常见的操作包括

  • -a:增加,在当前行下面增加一行指定内容
  • -c:替换,将选定行替换为指定内容
  • -d:删除,删除选定的行
  • -i:插入,在选定行上面插入一行指定内容
  • -p:打印,如果同时指定行,表示打印指定行;如果不指定行,则表示打印所有内容;如果有非打印字符,则以 ASCII 码输出。其通常与“-n”选项一起使用
  • -s:替换,替换指定字符
  • -y:字符转换

用法

输出符合条件的文本(p 表示正常输出)

输出所有内容
[root@localhost ~]# sed -n 'p' test.txt 输出第三行
[root@localhost ~]# sed -n '3p' test.txt 输出3~5行
[root@localhost ~]# sed -n '3,5p' test.txt 输出所有奇数行
[root@localhost ~]# sed -n 'p;n' test.txt 输出所有偶数行
[root@localhost ~]# sed -n 'n;p' test.txt 输出第1~5行之间的奇数行
[root@localhost ~]# sed -n '1,5{p;n}' test.txt 输出第10行至文件尾之间的偶数行
[root@localhost ~]# sed -n '10,${n;p}' test.txt 
注释:此命令中,读取的第一行是文件的第10行,读取的第二行,是文件的第11行,依次类推输出包含the的行
[root@localhost ~]# sed -n '/the/p' test.txt 输出从第4行开始至第一个包含the的行
[root@localhost ~]# sed -n ' 4,/the/p' test.txt 输出包含the的行所在的行号
[root@localhost ~]# sed -n '/the/=' test.txt 注释:=用来输出行号输出以PI开头的行
[root@localhost ~]# sed -n '/^PI/p' test.txt 输出包含单词wood的行
[root@localhost ~]# sed -n '/\<wood\>/p' test.txt 

删除符合条件的文本(d

// 删除第3行
[root@localhost ~]# nl test.txt | sed '3d'		##显示行号
或
[root@localhost ~]# sed '3d' test.txt		##不显示行号// 删除3~5行
[root@localhost ~]# nl test.txt |sed '3,5d'// 删除包含cross的行
[root@localhost ~]# nl test.txt |sed '/cross/d'注释:删除不包含cross的行
[root@localhost ~]# nl test.txt |sed '/cross/! d'// 删除以小写字母开头的行
[root@localhost ~]# sed '/^[a-z]/d' test.txt // 删除以点结尾的行
[root@localhost ~]# sed '/\.$/d' test.txt // 删除空行
[root@localhost ~]# sed '/^$/d' test.txt

替换符合条件的文本

  • s(字符串替换)
  • c(整行/整块替换)
  • y (字符转换)
将每行的第一个the换成THE
[root@localhost ~]# sed 's/the/THE/' test.txt 将每行中的第2个l换成L
[root@localhost ~]# sed 's/l/L/2' test.txt 将文中所有的the换成THE
[root@localhost ~]# sed 's/the/THE/g' test.txt 将文中所有的o删除
[root@localhost ~]# sed 's/o//g' test.txt 在每行的行首插入#
[root@localhost ~]# sed 's/^/#/' test.txt 
注释:在每行行尾添加#
[root@localhost ~]# sed 's/$/#/' test.txt 在包含the的每行的行首插入#
[root@localhost ~]# sed '/the/s/^/#/' test.txt 在每行的行尾插入字符串EOF
[root@localhost ~]# sed 's/$/EOF/' test.txt将第3~5行中的所有the替换成THE
[root@localhost ~]# sed '3,5s/the/THE/g' test.txt 将包含the的所有行中的o都替换成O
[root@localhost ~]# sed '/the/s/o/O/g' test.txt

迁移符合条件的文本

  • H:复制到剪贴板
  • gG:将剪贴板中的数据覆盖/追加至指定行
  • w:保存为文件
  • r:读取指定文件
  • a:追加指定内容
// 将包含the的行迁移至文件的末尾
[root@localhost ~]# sed '/the/{H;d};$G' test.txt // 将第1~5行的内容转移至第17行后
[root@localhost ~]# sed '1,5{H;d};17G' test.txt // 将包含the的行另存为文件out.txt
[root@localhost ~]# sed '/the/w out.txt' test.txt // 将文件/etc/hostname的内容添加到包含the的每一行后
[root@localhost ~]# sed '/the/r /etc/hostname' test.txt // 在第3行后插入一个新行,内容为#chkconfig:35 82 20
[root@localhost ~]# sed '3a#chkconfig:35 82 20' test.txt // 在包含the的每行后插入一个新行,内容为New
[root@localhost ~]# sed '/the/aNew' test.txt // 在第3行后插入多行内容
[root@localhost ~]# sed '3aNew1\nNew2' test.txt注释:\n为换行,添加两行为New1和New2

使用脚本编辑文件

//将第 1~5 行内容转移至第 17 行后
sed '1,5{H;d};17G' test.txt
[root@localhost ~]# vi opt.list
1,5H
1,5d
17G
[root@localhost ~]# sed -f opt.list test.txt
The year ahead will test our political establishment to the limit. PI=3.141592653589793238462643383249901429
a wood cross!
Actions speak louder than words
#woood #
#woooooood #
AxyzxyzxyzxyzC
I bet this place is really spooky late at night!
Misfortunes never come alone/single.
I shouldn't have lett so tast. he was short and fat.
He was wearing a blue polo shirt with black pants.
The home of Football on BBC Sport online.
the tongue is boneless but it breaks bones.12!
google is the best tools for search keyword.

sed 直接操作文件

[root@localhost ~]# vim local_only_ftp.sh
#!/bin/bash
# 指定样本文件路径、配置文件路径
SAMPLE="/usr/share/doc/vsftpd-3.0.2/EXAMPLE/INTERNET_SITE/vsftpd.conf " CONFIG="/etc/vsftpd/vsftpd.conf" 
# 备份原来的配置文件,检测文件名为/etc/vsftpd/vsftpd.conf.bak 备份文件是否存在, 若不存在则使用 cp 命令进行文件备份
[ ! -e "$CONFIG.bak" ] && cp $CONFIG $CONFIG.bak
# 基于样本配置进行调整,覆盖现有文件
sed -e '/^anonymous_enable/s/YES/NO/g' $SAMPLE > $CONFIG
sed -i -e '/^local_enable/s/NO/YES/g' -e '/^write_enable/s/NO/YES/g' $CONFIG
grep "listen" $CONFIG || sed -i '$alisten=YES' $CONFIG
# 启动 vsftpd 服务,并设为开机后自动运行
systemctl restart vsftpd
systemctl enable vsftpd
[root@localhost ~]# chmod +x local_only_ftp.sh

awk 工具

awk 常见用法

  • $0:表示整个当前行
  • $1           每行第一个字段
  • NF          字段数量变量
  • NR          每行的记录号,多文件记录递增
  • FNR        与NR类似,不过多文件记录不递增,每个文件都从1开始
  • \t            制表符
  • \n           换行符
  • FS          BEGIN时定义分隔符
  • RS       输入的记录分隔符, 默认为换行符(即文本是按一行一行输入)
  • ~            匹配,与==相比不是精确比较
  • !~           不匹配,不精确比较
  • ==         等于,必须全部相等,精确比较
  • !=           不等于,精确比较
  • &&     逻辑与
  • ||             逻辑或
  • +            匹配时表示1个或1个以上
  • /[0-9][0-9]+/   两个或两个以上数字
  • /[0-9][0-9]*/    一个或一个以上数字
  • FILENAME 文件名
  • OFS      输出字段分隔符, 默认也是空格,可以改为制表符等
  • ORS        输出的记录分隔符,默认为换行符,即处理结果也是一行一行输出到屏幕
  • -F'[:#/]'   定义三个分隔符

awk案例

按行输出文本

//输出所有
awk -F":" '{print}' /etc/passwd
//输出所有
awk -F":" '{print $0}' /etc/passwd
//显示第3行到第6行
awk -F: 'NR==3,NR==6{print}' /etc/passwd 
//显示第3行到第6行
awk -F: 'NR>=3&&NR<=6{print}' /etc/passwd
//显示第3行和第6行
awk -F: 'NR==3||NR==6{print}' /etc/passwd
//显示奇数行
awk '(NR%2)==1{print}' /etc/passwd
//显示偶数行
awk '(NR%2)==0{print}' /etc/passwd
//显示以root开头的行
awk '/^root/{print}' /etc/passwd
//显示以nologin结尾的行
awk '/nologin$/{print}' /etc/passwd
//统计以/bin/bash结尾的行数
awk 'BEGIN {x=0};/\/bin\/bash$/{x++};END {print x}' /etc/passwd
//统计以空行分隔的文本段落数
awk 'BEGIN{RS=""};END{print NR}' /etc/ssh/sshd_config//输出每行的行号
awk '{print NR,$0}' /etc/passwd
//依次打印行号,字段数,最后字段值,制表符,每行内容
awk -F: '{print NR,NF,$NF,"\t",$0}' /etc/passwd
//显示第5行
awk -F: 'NR==5{print}'  /etc/passwd
//不显示第一行
route -n|awk 'NR!=1{print}'//显示每行有多少字段
awk -F: '{print NF}' /etc/passwd
//将每行第NF个字段的值打印出来awk -F: '{print $NF}' /etc/passwd
//显示只有4个字段的行
awk -F: 'NF==4 {print }' /etc/passwd//显示每行字段数量大于2的行
awk -F: 'NF>2{print $0}' /etc/passwd

按字段输出文本

//显示第三列
awk -F":" '{print $3}' /etc/passwd
//$1与$3相连输出,无空格,
awk -F":" '{print $1 $3}' /etc/passwd
//多了一个逗号,输出第1和第3个字段,有空格
awk -F":" '{print $1,$3}' /etc/passwd
//统计密码为空的shadow记录
awk -F: '$2=="!!" {print}' /etc/shadow
##显示密码为空的用户的shadow信息
awk 'BEGIN {FS=":"}; $2=="!!" {print}' /etc/shadow
##显示第七个字段为/bash的行的第一个字段
awk -F ":" '$7~"/bash" {print $1}' /etc/passwd
//显示第5行
awk -F: 'NR==5{print}' /etc/passwd
//$1与$3之间手动添加空格分隔
awk -F":" '{print $1 " " $3}' /etc/passwd

通过管道、双引号调用shell命令

##统计bash用户的个数
awk -F: '/bash$/{print | "wc -l"}' /etc/passwd
##统计在线用户的数量
awk 'BEGIN {while ("w" | getline) n++ ; {print n-2}}'
##输出当前主机名
awk 'BEGIN {"hostname" | getline;print $0}'//逻辑与,$1匹配mail,并且$3>6
awk -F: '$1~/mail/ && $3>6 {print }' /etc/passwd
awk -F: '{if($1~/mail/ && $3>8) print }' /etc/passwd
//逻辑或,统计以mail开头或第3列大于1000的行  
awk -F: '$1~/mail/ || $3>1000 {print }' /etc/passwd
awk -F: '{if($1~/mail/ || $3>1000) print }' /etc/passwd 

优点

  • 功能强大的编辑工具
  • 逐行读取输入文本
  • 根据指定的匹配模式进行查找,对符合条件的内容进行格式化输出或者过滤处理
  • 可以在无交互的情况下实现相当复杂的文本操作,被广泛应用于 Shell 脚本

awk 包含几个特殊的内建变量(可直接用)

  • FS:指定每行文本的字段分隔符,默认为空格或制表位
  • NF:当前处理的行的字段个数
  • NR:当前处理的行的行号(序数)
  • $0:当前处理的行的整行内容
  • $n:当前处理行的第 n 个字段(第 n 列)
  • FILENAME:被处理的文件名
  • RS:数据记录分隔,默认为\n,即每行为一条记录

sort 工具

常用的文件排序工具有三种
  • sort
  • uniq
  • wc

sort 是以行为单位对文件内容进行排序的工具,也可以根据不同的数据类型来排序

sort 命令的语法为“sort [选项] 参数,其中常用的选项包括

  • -f:忽略大小写
  • -b:忽略每行前面的空格
  • -M:按照月份进行排序
  • -n:按照数字进行排序
  • -r:反向排序
  • -u:等同于 uniq,表示相同的数据仅显示一行
  • -t:指定分隔符,默认使用[Tab]键分隔
  • -o <输出文件>:将排序后的结果转存至指定文件
  • -k:指定排序区域

/将/etc/passwd 文件中的账号进行排序

[root@localhost ~]# sort /etc/passwd

/etc/passwd 文件中第三列进行反向排序

[root@localhost ~]# sort -t ':' -rk 3 /etc/passwd

/etc/passwd 文件中第三列进行排序,并将输出内容保存至 user.txt 文件中

uniq 工具

通常与 sort 命令结合使用,用于报告或者忽略文件中的重复行

命令语法格式为:uniq [选项] 参数

常用选项包括
  • -c:进行计数
  • -d:仅显示重复行
  • -u:仅显示出现一次的行

删除 testfile 文件中的重复行

[root@localhost ~]# cat testfile
Linux 10 
Linux 20 
Linux 30 
Linux 30 
Linux 30 
CentOS 6.5
CentOS 6.5 
CentOS 6.5 
CentOS 7.3 
CentOS 7.3 
CentOS 7.3[root@localhost ~]# uniq testfile 
Linux 10 
Linux 20 
Linux 30 
CentOS 6.5 
CentOS 7.3

tr 工具

常用于标准输入的字符进行替换、压缩和删除

优点
  • 可以将一组字符替换之后变成另一组字符
  • 经常用来编写优美的单行命令
  • 作用很强大

常用选项包括

  • -c:取代所有不属于第一字符集的字符
  • -d:删除所有属于第一字符集的字符
  • -s:把连续重复的字符以单独一个字符表示
  • -t:先删除第一字符集较第二字符集多出的字符

将输入字符由大写转换为小写

[root@localhost ~]# echo "KGC" | tr 'A-Z' 'a-z' 
kgc

压缩输入中重复的字符

[root@localhost ~]# echo "thissss is a text linnnnnnne." | tr -s 'sn' 
this is a text line.

删除字符串中某些字符

[root@localhost ~]# echo 'hello world' | tr -d 'od' 
hell wrl

小阿轩yx-Shell编程之正则表达式与文本处理器

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/844378.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C++笔试强训day36

目录 1.提取不重复的整数 2.【模板】哈夫曼编码 3.abb 1.提取不重复的整数 链接https://www.nowcoder.com/practice/253986e66d114d378ae8de2e6c4577c1?tpId37&tqId21232&ru/exam/oj 按照题意模拟就行&#xff0c;记得从右往左遍历 #include <iostream> usi…

GPT-4O神器来袭!自动生成Figma设计稿,移动端开发瞬间加速!

2024年5月29日- 近日&#xff0c;一款基于GPT-4O技术的创新工具成功实现根据产品需求文档&#xff08;PRD&#xff09;自动生成Figma设计稿的功能&#xff0c;为移动端应用开发者带来革命性的便捷。据悉&#xff0c;该功能主要针对移动端应用进行优化&#xff0c;并支持使用高质…

【环境配置】windows的磁盘分区、VMware下的ubuntu20的安装、虚拟机系统界面过小的处理

这段时间在折腾自己的笔记本&#xff0c;刚好也有同学新买台式机咨询安装VMware软件&#xff0c;就顺便记录下windows的环境的一些操作。方便自己需要时查阅。 1 windows磁盘分区 在Windows系统中&#xff0c;磁盘分区和管理可以通过【磁盘管理】工具进行。要打开磁盘管理&…

系统架构设计师【第2章】: 计算机系统基础知识 (核心总结)

文章目录 2.1 计算机系统概述2.2 计算机硬件2.2.1 计算机硬件组成2.2.2 处理器2.2.3 存储器2.2.4 总线2.2.5 接口2.2.6 外部设备 2.3 计算机软件2.3.1 计算机软件概述2.3.2 操作系统2.3.3 数据库2.3.4 文件系统2.3.5 网络协议2.3.6 中间件2.3.7 软件构件2.3.8 …

安卓开发板_开发评估套件_4G/5G联发科MTK安卓主板定制开发

安卓开发板采用了联发科八核A53 CPU&#xff0c;主频2.0GHz&#xff0c;采用12nm制程工艺&#xff0c;拥有强大的通用计算性能。配备GE8300 GPU&#xff0c;支持1080P视频编码和H.264硬解码&#xff0c;能够解析目前流行的视频和图片格式&#xff0c;非常适合各种功能APP的测试…

网络工程基础 不同网段下的设备实现通信

交换机可以实现同一个网段下的不同设备直接通信 路由器可以实现不同的网段下的设备进行通信 路由器查看路由表命令 display ip routing-table 华为路由器配置静态路由命令&#xff1a; ip route-static 目的网络地址 子网掩码 下一跳地址 电脑判断不同网段的ip会把请求转给网…

SOL 交易机器人基本知识

有没有可以盈利的机器人&#xff1f; 是的&#xff0c;各行各业都有许多盈利机器人。在金融领域&#xff0c;交易机器人被广泛用于自动化投资策略并根据预定义的算法执行交易。这些机器人可以分析市场趋势并做出快速决策&#xff0c;从而可能带来可观的回报。同样&#xff0c;在…

CentOS下安装SVN客户端及使用方法

一、前言 Subversion&#xff08;SVN&#xff09;是一款开源的版本控制系统&#xff0c;它可以帮助开发者追踪和管理代码、文档或其他文件的更改历史。在Linux系统中&#xff0c;特别是在CentOS环境下&#xff0c;安装和使用SVN客户端是日常工作中常见的任务。本文将介绍如何在…

【PHP项目实战训练】——laravel框架的实战项目中mysql数据库的数据的数据在blade.php中展示

&#x1f468;‍&#x1f4bb;个人主页&#xff1a;开发者-曼亿点 &#x1f468;‍&#x1f4bb; hallo 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍&#x1f4bb; 本文由 曼亿点 原创 &#x1f468;‍&#x1f4bb; 收录于专栏&#xff1a…

【Python Cookbook】S01E02 从任意长度的可迭代对象中分解元素

目录 问题解决方案讨论 问题 从某个不确定长度的迭代对象中分解出 N N N 个元素。 解决方案 *分解操作和各种函数式语言中的列表处理功能有着一定的相似性。例如&#xff0c;如果有一个列表&#xff0c;可以像下面这样轻松将其分解为头部和尾部。 scores [99, 97, 91, 89…

【Java】HOT100+代码随想录:动态规划(下)

目录 三、打家劫舍 LeetCode198&#xff1a;打家劫舍 LeetCode213&#xff1a;打家劫舍ii LeetCode337&#xff1a;打家劫舍iii&#xff08;树形&#xff09; 四、股票问题 时间不多了&#xff0c;其他的先不写了 LeetCode121&#xff1a;买卖股票的最佳时机 五、子序列…

Plesk面板上网站无法访问如何查看日志

近期我的网站出现无法访问的问题&#xff0c;这边想要查询为什么出现无法访问的原因&#xff0c;但不知道如何在主机上面进行检查&#xff0c;由于我使用的Hostease的Windows虚拟主机产品默认带普通用户权限的Plesk面板&#xff0c;因此联系Hostease的咨询了Hostease技术支持&a…

建立FTP服务器

文章目录 建立FTP服务器1. 使用VMware安装CentOS 7虚拟机。2. 安装完虚拟机后&#xff0c;进入虚拟机&#xff0c;修改网络配置&#xff08;onboot改为yes&#xff09;并重启网络服务&#xff0c;查看相应IP地址&#xff0c;并使用远程连接软件进行连接。3.配置yum源&#xff0…

能芯(EnChip)模拟芯片应用和选型

数据显示&#xff0c;超过60%的驾驶者会在开车时听音乐&#xff0c;这不仅可以提高驾驶者的注意力&#xff0c;还可以缓解驾驶过程中产生的疲劳和压力&#xff0c;特别是在长途驾驶或交通拥堵时尤其明显。基于音乐欣赏&#xff0c;高保真音质是音响系统的核心指标之一&#xff…

高考前很焦虑?看看罗永浩提的三个建议!罗永浩推荐的随身WiFi居然蕴含这样的商机?2024普通人如何翻身?

你能相信现如今身家过亿的老罗罗永浩高中就辍学了吗&#xff1f;相信很多人都不敢置信吧。罗永浩无论是表现出来的口才、情商还是智商&#xff0c;无论如何都无法让人把他和高中辍学联系起来。 而这一点似乎也是老罗人生中的一个遗憾&#xff0c;于是又在一年高考季的时候&…

相对位姿估计

相对位姿估计 示意图 理论推导 离线数据库&#xff1a; P的位置 P [ X , Y , Z ] T P[X,Y,Z]^{T} P[X,Y,Z]T 相机内参 k 1 k_{1} k1​ 安卓手机&#xff1a; 相机内参 k 2 k_{2} k2​ 两个像素点位置 &#xff1a; p 1 和 p 2 p_1和p_2 p1​和p2​ 公式一&#xff1a;…

为师妹写的《Java并发编程之线程池十八问》被表扬啦!

写在开头 之前给一个大四正在找工作的学妹发了自己总结的关于Java并发中线程池的面试题集,总共18题,将之取名为《Java并发编程之线程池十八问》,今天聊天时受了学妹的夸赞,心里很开心,毕竟自己整理的东西对别人起到了一点帮助,记录一下! Java并发编程之线程池十八问 经过…

5月岚庭工人大会“安全就是效率、形象即是品质”

2024年5月18日、19日岚庭一月一期的“产业工人大会”和“工程大会”圆满举行初夏正当时&#xff0c;此次大会主要围绕“安全”与“形象”展开六场专题培训只为精益求精产业工人和装修管家全体到场。 岚庭 以绝对【安全】护家护园 安全就是生命&#xff0c;违章就是事故&#x…

开源DMS文档管理系统 Nuxeo Vs Alfresco对比及 API 使用概述

1. 文档管理系统是什么 文档管理系统&#xff08;DMS&#xff1a;Document Management System&#xff09;是一种软件系统&#xff0c;用于组织、存储、检索和管理电子文档和文件。这些文件可以是各种格式的电子文档&#xff0c;如文本文档、电子表格、图像、音频或视频文件等…

从一维到二维:数组转换的奥秘与应用

新书上架~&#x1f447;全国包邮奥~ python实用小工具开发教程http://pythontoolsteach.com/3 欢迎关注我&#x1f446;&#xff0c;收藏下次不迷路┗|&#xff40;O′|┛ 嗷~~ 目录 一、引言&#xff1a;数组转换的魅力 二、一维数组转二维数组的基础方法 1. 确定二维数组的…