目录
sed是一种支持正则表达式的非交互式流编辑器,是脚本中修改文本或者文本替换的最佳工具
sed本身也是一个管道命令,它可以将数据进行替换、删除、新增、选取特定行等功能
# 语法格式
sed [选项] sed编辑命令 输入文件
# 常用选项
-n:只显示匹配处理的行(否则会输出所有)
-r:支持扩展正则表达式
-i:直接在文件中进行修改,而不是输出到屏幕
-e:执行多个编辑命令时(一般用;代替)
-f:从脚本文件中读取内容并执行(文件中的编辑命令每行一个,不用;隔开)
# 常用编辑命令
p:打印匹配行 print
d:删除指定行 delete
a:在匹配行后面追加 append
i:在匹配行前面插入 insert
c:整行替换
r:将文件的内容读入 read
w:将文本写入文件 write
s:字符串替换(匹配正则表达式)substitution
=: 输出行号###以上的操作都既可以根据行号,又可以根据模式匹配
###打印第1行
[root@xieshan ~]# sed -n '1p' /etc/passwd
root:x:0:0:root:/root:/bin/bash
###打印第2行到第4行
[root@xieshan ~]# sed -n '2,4p' /etc/passwd
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@xieshan ~]# sed -n '2,+2p' /etc/passwd
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@xieshan ~]# sed -n '$p' /etc/passwd
cali123:x:1026:1028::/home/cali123:/bin/bash
###打印第一行和最后一行
[root@xieshan ~]# sed -n '1p;$p' /etc/passwd
root:x:0:0:root:/root:/bin/bash
cali123:x:1026:1028::/home/cali123:/bin/bash
###不打印第4行到最后一行,即打印第1行到第3行,并且显示行号
[root@xieshan ~]# sed -n '4,$!{=;p}' /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
###打印匹配的adm行到匹配的sync行
[root@xieshan ~]# sed -n '/adm/,/sync/p' /etc/passwd
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
###打印第1行,第3行,第5行
[root@xieshan ~]# sed -n '1p;3p;5p' /etc/passwd
root:x:0:0:root:/root:/bin/bash
daemon:x:2:2:daemon:/sbin:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
###打印第3行和第5行
[root@xieshan ~]# sed -n -e '3p' -e '5p' /etc/passwd
daemon:x:2:2:daemon:/sbin:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
### 从第一行开始,隔两行输出一行
[root@xieshan 0713]# cat /etc/passwd -n|sed -n '1~2p' #2是步长值,隔两个输出
1 root:x:0:0:root:/root:/bin/bash
3 daemon:x:2:2:daemon:/sbin:/sbin/nologin
5 lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
7 shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
9 mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
11 games:x:12:100:games:/usr/games:/sbin/nologin
13 nobody:x:99:99:Nobody:/:/sbin/nologin
###匹配以s开头的行,根据正则模式来匹配,没有根据行号
[root@xieshan 0713]# sed -n '/^s/p' /etc/passwd
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
sc:x:1000:1000:sc:/home/sc:/bin/bash
sc1:x:1001:1001::/home/sc1:/bin/bash
###不显示/etc/ssh/sshd_config里面的无效行,也就是不显示空行或者以#开头的行
[root@xieshan 0713]# sed -rn '/^#|^$/!p' /etc/ssh/sshd_config #|是扩展正则
HostKey /etc/ssh/ssh_host_rsa_key
HostKey /etc/ssh/ssh_host_ecdsa_key
HostKey /etc/ssh/ssh_host_ed25519_key
SyslogFacility AUTHPRIV
AuthorizedKeysFile .ssh/authorized_keys
PasswordAuthentication yes
ChallengeResponseAuthentication no
GSSAPIAuthentication yes
GSSAPICleanupCredentials no
UsePAM yes
X11Forwarding yes
AcceptEnv LANG LC_CTYPE LC_NUMERIC LC_TIME LC_COLLATE LC_MONETARY LC_MESSAGES
AcceptEnv LC_PAPER LC_NAME LC_ADDRESS LC_TELEPHONE LC_MEASUREMENT
AcceptEnv LC_IDENTIFICATION LC_ALL LANGUAGE
AcceptEnv XMODIFIERS
Subsystem sftp /usr/libexec/openssh/sftp-server
###显示以/符号结尾的行,需要使用转义符号
[root@xieshan 0713]# df -h|sed -n '/\/$/p'
/dev/mapper/centos-root 17G 3.9G 14G 23% /
[root@xieshan 0713]# df -h|egrep '/$' #通常使用egrep查找
/dev/mapper/centos-root 17G 3.9G 14G 23% /
shell里的变量传递给sed--》传参问题--〉使用双引号,然后变量外面加上花括号
[root@xieshan 0713]# a=5
[root@xieshan 0713]# b=8
[root@xieshan 0713]# sed -n "${a}p;${b}p" /etc/passwd
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
halt:x:7:0:halt:/sbin:/sbin/halt
[root@xieshan 0713]#
[root@xieshan 0713]# sg=sc
[root@xieshan 0713]# sed -n "/${sg}/p" /etc/passwd
sc:x:1000:1000:sc:/home/sc:/bin/bash
[root@xieshan lianxi]# cat cali.txt
cali
hunan
yongz
rose
jack
###以下的操作都只是在屏幕上显示,实际文件并没有修改,要想直接在文件中进行修改,需要加上-i选项
#删除2到4行
[root@xieshan lianxi]# sed '2,4d' cali.txt
cali
jack
#删除含有字符串z的行
[root@xieshan lianxi]# sed '/'z'/d' cali.txt
cali
hunan
rose
jack
#删除不含有字符串z的行
[root@xieshan lianxi]# sed '/'z'/!d' cali.txt
yongz
#删除空行和注释
[root@xieshan lianxi]# sed -r '/^$|^#/d' cali.txt
cali
hunan
yongz
rose
jack
#删除空行以及以#开头的行
[root@xieshan 0713]# sed -i -r '/^#|^$/d' sshd_config
[root@xieshan 0713]# cat sshd_config
HostKey /etc/ssh/ssh_host_rsa_key
HostKey /etc/ssh/ssh_host_ecdsa_key
HostKey /etc/ssh/ssh_host_ed25519_key
SyslogFacility AUTHPRIV
AuthorizedKeysFile .ssh/authorized_keys
PasswordAuthentication yes
ChallengeResponseAuthentication no
GSSAPIAuthentication yes
GSSAPICleanupCredentials no
UsePAM yes
X11Forwarding yes
AcceptEnv LANG LC_CTYPE LC_NUMERIC LC_TIME LC_COLLATE LC_MONETARY LC_MESSAGES
AcceptEnv LC_PAPER LC_NAME LC_ADDRESS LC_TELEPHONE LC_MEASUREMENT
AcceptEnv LC_IDENTIFICATION LC_ALL LANGUAGE
AcceptEnv XMODIFIERS
Subsystem sftp /usr/libexec/openssh/sftp-server
[root@xieshan 0713]#
###追加操作可以根据行号和模式匹配进行操作
[root@xieshan lianxi]# cat cali.txt
cali
hunan
yongz
rose
jack
#在第2行后面追加字符串1000
[root@xieshan lianxi]# sed '2a 1000' cali.txt
cali
hunan
1000
yongz
rose
jack
#在包含root的行下面追加字符串1000
[root@xieshan lianxi]# sed '/root/a 1000' /etc/passwd
root:x:0:0:root:/root:/bin/bash
1000
operator:x:11:0:operator:/root:/sbin/nologin
1000
### 插入操作可以根据行号和模式匹配进行操作
[root@xieshan lianxi]# cat cali.txt
cali
hunan
yongz
rose
jack
#在cali.txt的最后一行前面插入字符串1000
[root@xieshan lianxi]# sed '$i 1000' cali.txt
cali
hunan
yongz
rose
1000
jack
#在包含root的行的前面插入字符串1000
[root@xieshan lianxi]# sed '/root/i 1000' /etc/passwd
1000
root:x:0:0:root:/root:/bin/bash
1000
operator:x:11:0:operator:/root:/sbin/nologin
#### 更改整行操作可以根据行号和模式匹配进行操作
[root@xieshan lianxi]# cat cali.txt
cali
hunan
yongz
rose
jack
#将第3行整行替换成字符串1000
[root@xieshan lianxi]# sed '3c 1000' cali.txt
cali
hunan
1000
rose
jack
#将root所在的行 整行替换成字符串1000
[root@xieshan lianxi]# sed '/root/c suda' /etc/passwd
suda
bin:x:1:1:bin:/bin:/sbin/nologin
[root@xieshan 0713]# cat ifcfg-ens33
BOOTPROTO="none"
NAME="ens33"
DEVICE="ens33"
ONBOOT="yes"
IPADDR=192.168.2.43
PREFIX=24
GATEWAY=192.168.2.1
DNS1=114.114.114.114
[root@xieshan 0713]# sed -i '4c ONBOOT="no"' ifcfg-ens33
[root@xieshan 0713]# cat ifcfg-ens33
BOOTPROTO="none"
NAME="ens33"
DEVICE="ens33"
ONBOOT="no"
IPADDR=192.168.2.43
PREFIX=24
GATEWAY=192.168.2.1
DNS1=114.114.114.114
[root@xieshan 0713]# sed -i '/^BOOTPROTO/c BOOTPOROTO="yes"' ifcfg-ens33
[root@xieshan 0713]# cat ifcfg-ens33
BOOTPOROTO="yes"
NAME="ens33"
DEVICE="ens33"
ONBOOT="no"
IPADDR=192.168.2.43
PREFIX=24
GATEWAY=192.168.2.1
DNS1=114.114.114.114
[root@xieshan 0713]# sed -i '/^ONBOOT/ s/no/yes/' ifcfg-ens33
[root@xieshan 0713]# cat ifcfg-ens33
BOOTPOROTO="yes"
NAME="ens33"
DEVICE="ens33"
ONBOOT="yes"
IPADDR=192.168.2.43
PREFIX=24
GATEWAY=192.168.2.1
DNS1=114.114.114.114
### 读入操作可以根据行号和模式匹配进行操作
# 在/etc/passwd文件的末尾后面读入cali.txt文件的内容
[root@xieshan lianxi]# sed '$r cali.txt' /etc/passwd
califeng:x:1025:1027::/home/califeng:/bin/bash
cali123:x:1026:1028::/home/cali123:/bin/bash
cali
hunan
yongz
rose
jack
[root@scchen1 /]# cat selinux
# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
# enforcing - SELinux security policy is enforced.
# permissive - SELinux prints warnings instead of enforcing.
# disabled - No SELinux policy is loaded.
SELINUX=disabled
# SELINUXTYPE= can take one of three values:
# targeted - Targeted processes are protected,
# minimum - Modification of targeted policy. Only selected processes are protected.
# mls - Multi Level Security protection.
SELINUXTYPE=targeted
#把selinux中以#开头的行,不写入a.txt文件中
[root@scchen1 /]# sed '/^#/!w a.txt' selinux
[root@scchen1 /]# cat a.txt
SELINUX=disabled
SELINUXTYPE=targeted
1.sed替换的基本语法:
sed 's/原字符串/替换的字符串'
2.特殊的字符样式需要使用转义符号\,但是单引号内无法使用转义字符,所以sed替换的语法还可以写成:
sed "s/原字符串/替换的字符串"
3.可以在匹配公式最后面加一个g,这样就会替换每一个匹配的字符串,否则只替换每行的第一个匹配的字符串
sed "s/原字符串/替换的字符串/g"
4.一些特殊字符的使用:
# ^表示以什么开头,$表示以什么结尾
# 注意这里的`&`符号,如果没有`&`,就会直接将匹配到的字符串替换掉
sed 's/^/添加的头部&/g' #在所有行首添加
sed 's/$/&添加的尾部/g' #在所有行末添加
sed '2s/原字符串/替换字符串/g' #替换第2行
sed '$s/原字符串/替换字符串/g' #替换最后一行
sed '2,5s/原字符串/替换字符串/g' #替换2到5行
sed '2,$s/原字符串/替换字符串/g' #替换2到最后一行
[root@xieshan 0713]# cat /etc/selinux/config
# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
# enforcing - SELinux security policy is enforced.
# permissive - SELinux prints warnings instead of enforcing.
# disabled - No SELinux policy is loaded.
SELINUX=enforcing
# SELINUXTYPE= can take one of three values:
# targeted - Targeted processes are protected,
# minimum - Modification of targeted policy. Only selected processes are protected.
# mls - Multi Level Security protection.
SELINUXTYPE=targeted
[root@xieshan 0713]# sed -i '/^SELINUX=/ s/enforcing/disabled/' /etc/selinux/config
[root@xieshan 0713]# cat /etc/selinux/config
# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
# enforcing - SELinux security policy is enforced.
# permissive - SELinux prints warnings instead of enforcing.
# disabled - No SELinux policy is loaded.
SELINUX=disabled
# SELINUXTYPE= can take one of three values:
# targeted - Targeted processes are protected,
# minimum - Modification of targeted policy. Only selected processes are protected.
# mls - Multi Level Security protection.
SELINUXTYPE=targeted
5.多个替换可以在同一条命令中执行,使用;分隔,或者使用-e选项
# 同时执行两个替换规则
sed 's/^/添加的头部&/g;s/$/&添加的尾部/g'
sed 's/^/添加的头部&/g -e s/$/&添加的尾部/g'
6.编辑一个test.txt文件,内容如下:
0.0.0.0
1.1.1.1
2.2.2.2
输出如下形式:
0.0.0.0:80,1.1.1.1:80,2.2.2.2:80
[root@localhost shell]#sed -i 'N;N;s/\n/:80,/g;s/$/:80/' test.txt
[root@localhost shell]# cat test.txt
0.0.0.0:80,1.1.1.1:80,2.2.2.2
=============
#xargs:将多行变成单行。将前面的标准输出通过管道进行标准输入得到的内容分割成一个一个的参数,使用空格隔开。
[root@localhost shell]#cat test.txt.bak|xargs
0.0.0.0 1.1.1.1 2.2.2.2
[root@localhost shell]#cat test.txt.bak|xargs|awk '{print $1":80,"$2":80,",$3":80"}'
0.0.0.0:80,1.1.1.1:80, 2.2.2.2:80
7.sed命令中&的用法
&表示替换命令中的匹配模式:代表模式匹配到的内容,然后可以引用
[root@localhost shell]# echo "i have a fat cat"
i have a fat cat
[root@localhost shell]# echo "i have a fat cat"|sed 's/.at/".at"/g'
i have a ".at" ".at"
[root@localhost shell]# echo "i have a fat cat"|sed 's/.at/"&"/g'
i have a "fat" "cat"
###将所有三位的数字后面加上0,四位数的不加,注意使用词边界
[root@localhost shell]# cat renxiaojing.txt
........
tanxue
zhang shuaishuai 123
zhang 456pengpeng pengpeng pengpeng pengpeng xuyalan
jingjing jingjing jingjing
[root@localhost shell]# sed -i -r 's/\<[0-9]{3}\>/&0/g' renxiaojing.txt
[root@localhost shell]# cat renxiaojing.txt
.....
tanxue
zhang shuaishuai 1230
zhang4560pengpeng pengpeng pengpeng pengpeng xuyalan
jingjing jingjing jingjing
#给文件中所有的大写字母后面加上2022
[root@localhost shell]# sed -n -r 's/[A-Z]/&2022/gp' test1.txt
abcH2022H2022H2022H2022dddde
abF2022K2022D2022dddde
isO2022O2022O2022ishabxil
H2022E2022P2022R2022E2022doodcm
8.\ \:转义字符
[root@localhost shell]# sed -n '/13\/Jul\/2022:16:53:58/,/13\/Jul\/2022:16:56:21/p' access.log
sed -n
[root@localhost shell]# sed -n '#13/Jul\/2022:16:53:58#,#13/Jul/2022:16:56:21#p' access.log
localhost shell]# sed -n 's#Jul#Aug#gp' access.log|head -5
修改时间:date -s "修改的时间"
9.标签
####小圆括号里面匹配的就是一个标签,后面再替换的时候可以引用,第一个小圆括号里的是\1,以此类推。
[root@localhost shell]# echo aaa bbb ccc |sed -r 's/([a-z]+) ([a-z]+) ([a-z]+)/\3 \2 \1/'
ccc bbb aaa
[root@localhost shell]# echo aaa bbb ccc |sed -r 's/([a-z]+) ([a-z]+) ([a-z]+)/\3/'
ccc
[root@localhost shell]# echo aaa bbb ccc |awk '{print $3,$2,$1}'
ccc bbb aaa
10.将以下文本倒序输出
0.0.0.0
1.1.1.1
2.2.2.2
[root@localhost shell]# tac test.txt.bak
2.2.2.2
1.1.1.1
0.0.0.0
方法二:
[root@localhost shell]# cat test.txt.bak|xargs|awk '{print $3"\n"$2"\n"$1}'
2.2.2.2
1.1.1.1
0.0.0.0
第一种:
cat /etc/password | grep "root"
第二种:
grep "root" /etc/passwd
grep命令还可以叠加使用
# 将/etc/passwd里没有出现root和nobody的行取出来
grep -v root /etc/passwd | grep -v nobody
-i ignore # 不区分大小写
-v invert # 取反,只打印没有匹配的,而匹配的反而不打印(只针对整行取反)
-n number # 显示匹配行及行号
-c count # 输出匹配行的数目
-o only-matching
# 只显示匹配行中匹配正则表达式的那部分
# 经常和 wc -l 命令搭配使用-r recursive # 递归的对目录下的所有文件(包括子目录)进行grep查找
-E Extend # 开启扩展的正则表达式
egrep = grep -E-A n after # 显示匹配到的字符串所在的行及其后n行
-B n before # 显示匹配到的字符串所在的行及其前n行
-C n context # 显示匹配到的字符串所在的行及其前后各n行
# 举例
# 将/etc/passwd文件中以root开头和以nobody开头的行取出来
[root@huyuxuan /]# cat /etc/passwd | grep -E "^root|^nobody"
root:x:0:0:root:/root:/bin/bash
nobody:x:65534:65534:Kernel Overflow User:/:/sbin/nologin
[root@huyuxuan /]# cat /etc/passwd | egrep "^root|^nobody"
root:x:0:0:root:/root:/bin/bash
nobody:x:65534:65534:Kernel Overflow User:/:/sbin/nologin
[] # 指定范围内的单个字符
[0-9] # 匹配0到9中的任意一个数字
[0-Z] # 匹配所有的字母和数字
[a-z] # 匹配a~z的所有的小写字母中的任意一个
[A-Z] # 匹配A~Z的所有的大写字母中的任意一个
[a-Z] # 匹配所有的大小写字母中的任意一个
[abc] # 匹配一个字符,这个字符必须是abc中的一个[^] # 指定范围外的的单个字符,取反
[^123] # 匹配一个字符,这个字符是除了1、2、3以外的所有字符
. # 代表单个任意字符
.* # 代表任意个任意字符
? # 前面的字符出现0次或1次
+ # 前面的字符出现1次以上
* # 前面的字符出现任意多次
? 、* 、+ 默认只能修饰前面一个字符{n} # 表示前面的字符出现n次
{n,m} # 表示前面的字符最少出现n次,最多出现m次
{n, } # 表示前面的字符最少出现n次
^ # 锚定行的开始
'^suda'匹配所有以suda开头的行$ # 锚定行的结束
'suda$'匹配所有以suda结尾的行^$ # 匹配空白行
\b # 单词锁定符
\b或\< # 锚定单词的词首
\b或\> # 锚定单词的词尾# 举例
'\bsuda\b'只匹配suda
'\bsuda'只匹配单词以suda开头
'suda\b'只匹配单词以suda结尾
() # 利用圆括号可以实现多个字符分组
# 在圆括号中利用"|"实现或者的功能
# 举例
(aa|bb){2}
文章浏览阅读1.3k次,点赞40次,收藏19次。虽然你不能直接计算每个房间的人数,但通过马尔科夫链的蒙特卡洛方法,你可以从任意状态(房间)开始采样,并最终收敛到目标分布(人数分布)。然后,根据一个规则(假设转移概率是基于房间的人数,人数较多的房间具有较高的转移概率),你随机选择一个相邻的房间作为下一个状态。比如在巨大城堡,里面有很多房间,找到每个房间里的人数分布情况(每个房间被访问的次数),但是你不能一次进入所有的房间并计数。但是,当你重复这个过程很多次时,你会发现你更有可能停留在人数更多的房间,而在人数较少的房间停留的次数较少。_马尔科夫链期望怎么求
文章浏览阅读3.9k次。一、su命令su命令用于切换当前用户身份到其他用户身份,变更时须输入所要变更的用户帐号与密码。命令su的格式为:su [-] username1、后面可以跟 ‘-‘ 也可以不跟,普通用户su不加username时就是切换到root用户,当然root用户同样可以su到普通用户。 ‘-‘ 这个字符的作用是,加上后会初始化当前用户的各种环境变量。下面看下加‘-’和不加‘-’的区别:root用户切换到普通..._限制su root登陆
文章浏览阅读1.2k次。精通VC与Matlab联合编程(六)作者:邓科下载源代码浅析VC与MATLAB联合编程浅析VC与MATLAB联合编程浅析VC与MATLAB联合编程浅析VC与MATLAB联合编程浅析VC与MATLAB联合编程 Matlab C/C++函数库是Matlab扩展功能重要的组成部分,包含了大量的用C/C++语言重新编写的Matlab函数,主要包括初等数学函数、线形代数函数、矩阵操作函数、数值计算函数_精通vc和matlab联合编程 六
文章浏览阅读128次。在MVC2中默认并没有实现DescriptionAttribute(虽然可以找到这个属性,通过阅读MVC源码,发现并没有实现方法),这很不方便,特别是我们使用EditorForModel的时候,我们需要对字段进行简要的介绍,下面来扩展这个属性。新建类 DescriptionMetadataProvider然后重写DataAnnotationsModelMetadataPro..._asp.net mvc 模型description
文章浏览阅读1.3k次。一.概述 本篇继续探讨web应用架构,讲基于DDD风格下最初的领域模型架构,不同于DDD风格下CQRS架构,二者架构主要区别是领域层的变化。 架构的演变是从领域模型到C..._eshoponweb
文章浏览阅读2.6w次,点赞23次,收藏85次。首先说明,本人之前没用过zookeeper、kafka等,尚硅谷十几个小时的教程实在没有耐心看,现在我也不知道分区、副本之类的概念。用kafka只是听说他比RabbitMQ快,我也是昨天晚上刚使用,下文中若有讲错的地方或者我的理解与它的本质有偏差的地方请包涵。此文背景的环境是windows,linux流程也差不多。 官网下载kafka,选择Binary downloads Apache Kafka 解压在D盘下或者什么地方,注意不要放在桌面等绝对路径太长的地方 打开conf_springboot kafka
文章浏览阅读1k次。编好水晶报表代码,用的是ActiveX模式,在本机运行,第一次运行提示安装ActiveX控件,安装后,一切正常,能正常打印,但发布到网站那边运行,可能是一闪而过,连提示安装ActiveX控件也没有,甚至相关的功能图标都不能正常显示,再点"打印图标"也是没反应解决方法是: 1.先下载"PrintControl.cab" http://support.businessobjects.c_水晶报表 不能打印
文章浏览阅读1.3k次。绝大部分UC/OS-II的源码是用移植性很强的ANSI C写的。也就是说某产品可以只使用很少几个UC/OS-II调用,而另一个产品则使用了几乎所有UC/OS-II的功能,这样可以减少产品中的UC/OS-II所需的存储器空间(RAM和ROM)。UC/OS-II是为嵌入式应用而设计的,这就意味着,只要用户有固化手段(C编译、连接、下载和固化), UC/OS-II可以嵌入到用户的产品中成为产品的一部分。1998年uC/OS-II,目前的版本uC/OS -II V2.61,2.72。1.UC/OS-Ⅱ简介。_ucos
文章浏览阅读614次,点赞22次,收藏11次。大家好,本文将围绕python自动化运维需要掌握的技能展开说明,python自动化运维从入门到精通是一个很多人都想弄明白的事情,想搞清楚python自动化运维快速入门 pdf需要先了解以下几个事情。这篇文章主要介绍了一个有趣的事情,具有一定借鉴价值,需要的朋友可以参考下。希望大家阅读完这篇文章后大有收获,下面让小编带着大家一起了解一下。_运维学python该学些什么
文章浏览阅读524次。2019独角兽企业重金招聘Python工程师标准>>> ..._hotfix for msxml 4.0 service pack 2 - kb832414
文章浏览阅读546次。python和易语言的脚本哪门更实用?_易语言还是python适合辅助
文章浏览阅读134次。详解redis中的锁以及使用场景,指令,事务,分布式,命令,时间详解redis中的锁以及使用场景易采站长站,站长之家为您整理了详解redis中的锁以及使用场景的相关内容。分布式锁什么是分布式锁?分布式锁是控制分布式系统之间同步访问共享资源的一种方式。为什么要使用分布式锁? 为了保证共享资源的数据一致性。什么场景下使用分布式锁? 数据重要且要保证一致性如何实现分布式锁?主要介绍使用redis来实..._redis setnx watch