linux文本处理三剑客grep,sed,awk

目录

一,文本三剑客之grep

 二,文本三剑客之sed

三,文本三剑客之awk

四,sort,uniq,和tr工具

1,sort工具

2,uniq工具

3,tr工具

五,实例


一,文本三剑客之grep

grep是linux中常见的文本处理工具之一,grep支持正则表达式,egrep支持扩展正则表达式。

grep命令是检索和过滤文件内容,主要处理文本中的字符。

grep格式:grep [选项]… 查找条件 目标文件

-i:查找时忽略大小写

-v:反向查找,输出与查找条件不相符的行

-o 只显示匹配项

-f 对比两个文件的相同行

-c 匹配的行数

例:

忽略大小写过滤

 反向查找

 只显示匹配的项

 匹配行数(有3行符合)

 对比两个文件相同的行

 支持正则表达式

匹配以root开头的行

匹配以root结尾的行和匹配root行

 匹配空行

 支持元字符

 支持分组

 支持扩展正则表达式(egrep与grep -E相同支持扩展正则表达式)

 二,文本三剑客之sed

sed是linux中常见的文本处理工具之一,sed支持正则表达式,支持扩展正则表达式。

sed 即 Stream EDitor,是行编辑器

Sed是从文件或管道中读取一行,处理一行,输出一行;再读取一行,再处理一行,再输出一行,直到最后一行。每当处理一行时,把当前处理的行存储在临时缓冲区中,称为模式空间(PatternSpace),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末尾。一次处理一行的设计模式使得sed性能很高,sed在读取大文件时不会出现卡顿的现象。如果使用vi命令打开几十M上百M的文件,明显会出现有卡顿的现象,这是因为vi命令打开文件是一次性将文件加载到内存,然后再打开。Sed就避免了这种情况,一行一行的处理,打开速度非常快,执行速度也很快

sed(Stream EDitor)是一个强大而简单的文本解析转换工具,可以读取文本,并根据指定的条件对文本内容进行编辑(删除、替换、添加、移动等),最后输出所有行或者仅输出处理的某些行。sed 也可以在无交互的情况下实现相当复杂的文本处理操作,被广泛应用于 Shell 脚本中,用以完成各种自动化处理任务。

sed 的工作流程主要包括读取、执行和显示三个过程。

  • 读取:sed 从输入流(文件、管道、标准输入)中读取一行内容并存储到临时的缓冲区中(又称模式空间,pattern space)。
  • 执行:默认情况下,所有的 sed 命令都在模式空间中顺序地执行,除非指定了行的地址,否则 sed 命令将会在所有的行上依次执行。
  • 显示:发送修改后的内容到输出流。在发送数据后,模式空间将会被清空。

sed的标准格式:

sed [option]... 'script;script;...' [input  file...]

       选项        自身脚本语法   支持标准输入管道   

常见的 sed 命令选项主要包含以下几种。

  • -e 或--expression=:表示用指定命令或者脚本来处理输入的文本文件。
  • -f 或--file=:表示用指定的脚本文件来处理输入的文本文件。
  • -h 或--help:显示帮助。
  • -n、--quiet 或 silent:表示仅显示处理后的结果。
  • -i:直接编辑文本文件。
  • a:增加,在当前行下面增加一行指定内容。
  • c:替换,将选定行替换为指定内容。
  • d:删除,删除选定的行。
  • i:插入,在选定行上面插入一行指定内容。
  • p:打印,如果同时指定行,表示打印指定行;如果不指定行,则表示打印所有内容;如果有非打印字符,则以 ASCII 码输出。其通常与“-n”选项一起使用。
  • s:替换,替换指定字符。
  • y:字符转换。

例:

[root@localhost opt]# sed ' '
111  #输入内容
111  #自动打印
112
112
113
113

[root@localhost opt]# sed '' passwd  #查看文件

 支持管道符

 支持重定向

 以文件passwd为例介绍sed的用法

 

[root@localhost opt]# sed -n '2p' passwd   #输出第二行
bin:x:1:1:bin:/bin:/sbin/nologin
[root@localhost opt]# sed -n '2,5p' passwd   #输出2到5行
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
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
[root@localhost opt]# sed -n 'p;n' 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
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
rtkit:x:172:172:RealtimeKit:/proc:/sbin/nologin
qemu:x:107:107:qemu user:/:/sbin/nologin
radvd:x:75:75:radvd user:/:/sbin/nologin

[root@localhost opt]# sed -n '1~2p' 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
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
rtkit:x:172:172:RealtimeKit:/proc:/sbin/nologin
qemu:x:107:107:qemu user:/:/sbin/nologin
radvd:x:75:75:radvd user:/:/sbin/nologin

[root@localhost opt]# sed -n 'n;p' passwd    #输出偶数行
bin:x:1:1:bin:/bin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
halt:x:7:0:halt:/sbin:/sbin/halt
operator:x:11:0:operator:/root:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
pulse:x:171:171:PulseAudio System Daemon:/var/run/pulse:/sbin/nologin
ntp:x:38:38::/etc/ntp:/sbin/nologin
root

[root@localhost opt]# sed -n '2~2p' passwd   #步进的方式输出偶数行
bin:x:1:1:bin:/bin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
halt:x:7:0:halt:/sbin:/sbin/halt
operator:x:11:0:operator:/root:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
pulse:x:171:171:PulseAudio System Daemon:/var/run/pulse:/sbin/nologin
ntp:x:38:38::/etc/ntp:/sbin/nologin
root

[root@localhost opt]# 

[root@localhost opt]# sed -n '1,5{p;n}' passwd   #输出1-5行中的奇数行
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

[root@localhost opt]# sed -n '10,${n;p}' passwd   #输出10行之后的偶数行
games:x:12:100:games:/usr/games:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
rtkit:x:172:172:RealtimeKit:/proc:/sbin/nologin
qemu:x:107:107:qemu user:/:/sbin/nologin
radvd:x:75:75:radvd user:/:/sbin/nologin

[root@localhost opt]# 

[root@localhost opt]# sed -n '/root/p' passwd    #输出包含root的行
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
root

[root@localhost opt]# sed -n '8,/root/p' passwd  #输出从第8行开始到有root的行
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin

[root@localhost opt]# sed -n '/root/=' passwd  #输出有root的行的行号
1
10
20

[root@localhost opt]# sed -n '/^root/p' passwd   #输出以root开头的行
root:x:0:0:root:/root:/bin/bash
root

[root@localhost opt]# sed -n '/root$/p' passwd    #输出以root结尾的行
root

[root@localhost opt]# sed -n '/\<mail\>/p' passwd   #输出包含单词mail的行
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin

[root@localhost opt]# sed '/nologin$/d' passwd   #删除以nologin结尾的行(并没有真正的删除,只是不显示)
root:x:0:0:root:/root:/bin/bash
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
root


[root@localhost opt]#

[root@localhost opt]# sed '5,15d' passwd   #删除5到15行(并没有真正的删除只是显示的时候不显示)
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
pulse:x:171:171:PulseAudio System Daemon:/var/run/pulse:/sbin/nologin
qemu:x:107:107:qemu user:/:/sbin/nologin
ntp:x:38:38::/etc/ntp:/sbin/nologin
radvd:x:75:75:radvd user:/:/sbin/nologin
root

[root@localhost opt]# sed '/sbin/d' passwd   #删除包含sbin的行
root:x:0:0:root:/root:/bin/bash
root

[root@localhost opt]# sed '/^$/d' passwd   #删除空行

。。。。
radvd:x:75:75:radvd user:/:/sbin/nologin
root
[root@localhost opt]# 
 

使用 sed 脚本将多个编辑指令存放到文件中(每行一条编辑指令),通过“-f”选项来调用

修改文件sed -i

 搜索替代

 s/pattern/string/修饰符 查找替换,支持使用其它分隔符,可以是其它形式:s@@@,s###
替换修饰符:
g 行内全局替换
p 显示替换成功的行
w   /PATH/FILE 将替换成功的行保存至文件中
I,i   忽略大小写

 g全局替换

 分组

 扩展正则表达式

 

 

三,文本三剑客之awk

awk:Aho, Weinberger, Kernighan,报告生成器,格式化文本输出,  

在 Linux/UNIX 系统中,awk 是一个功能强大的编辑工具,逐行读取输入文本,默认以空格或tab键作为分隔符作为分隔,并按模式或者条件执行编辑命令。而awk比较倾向于将一行分成多个字段然后进行处理。AWK信息的读入也是逐行

指定的匹配模式进行查找,对符合条件的内容进行格式化输出或者过滤处理,可以在无交互

的情况下实现相当复杂的文本操作,被广泛应用于 Shell 脚本,完成各种自动化配置任务。

 工作原理:

前面提到 sed 命令常用于一整行的处理,而 awk 比较倾向于将一行分成多个“字段”然后再进行处理,且默认情况下字段的分隔符为空格或 tab 键。awk 执行结果可以通过 print 的功能将字段数据打印显示。

格式:

awk [选项] ‘模式条件{操作}’ 文件1 文件2....
awk -f|-v 脚本文件 文件1 文件2.....

模式:未指定表示 为空

基础用法:

[root@localhost opt]# awk '{print}'
aa   #输入
aa   #再打印一遍
bb  
bb

[root@localhost opt]# awk '{print "hello"}'
2
hello  #打印hello
1
hello

[root@localhost opt]# awk 'BEGIN{print "hello"}'
hello  #BEGIN比较特殊值打一行

[root@localhost opt]# awk  -F: '{print "root"}' passwd
root
root
root
root
root
root
root
root
root
root      #passwd有多少行,就打印多少个root

[root@localhost opt]# awk  -F: '{print $1}' passwd   #以冒号作分割符,打印第一列
admin
 this is cat
 this is dog
bin
daemon
adm
lp
sync
shutdown

awk 包含几个特殊的内建变量(可直接用)如下所示:

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

[root@localhost opt]# df
文件系统                   1K-块     已用     可用 已用% 挂载点
/dev/mapper/centos-root 52403200 13610088 38793112   26% /
devtmpfs                  917600        0   917600    0% /dev
tmpfs                     933520        0   933520    0% /dev/shm
tmpfs                     933520    25636   907884    3% /run
tmpfs                     933520        0   933520    0% /sys/fs/cgroup
/dev/sr0                 4414592  4414592        0  100% /mnt
/dev/sda1                1038336   182376   855960   18% /boot
/dev/mapper/centos-home 49250820    33096 49217724    1% /home
tmpfs                     186708       12   186696    1% /run/user/42
tmpfs                     186708        0   186708    0% /run/user/0
[root@localhost opt]# df |awk '{print $5}'    #打印第5列
已用%
26%
0%
0%
3%
0%
100%
18%
1%
1%
0%
[root@localhost opt]# df |awk 'NR==2{print $5}'  #打印第二行,第5列
26%
[root@localhost opt]# df |awk -F"( |%)" 'NR==2{print $7}'  #以空格或%作分割符打印第二行第七列
26
 

[root@localhost opt]# df |awk  'NR==1{print $1$4}'  #打印的结果在一起
文件系统可用

[root@localhost opt]# df |awk  'NR==1{print $1":"$4}'  #可以用:分隔开来
文件系统:可用

[root@localhost opt]# awk -F: '{print NF}' passwd  #显示每行有几个字段
7
1
1
7
7
7
7
7
7
0

[root@localhost opt]# awk -F: '{print $NF}' passwd  # 打印最后一个字段
/bin/bash
 this is cat
 this is dog
/sbin/nologin
/sbin/nologin
/sbin/nologin
/sbin/nologin
/bin/sync
/sbin/shutdown

[root@localhost opt]# awk -F: '{print $(NF-1)}' passwd  #打印倒数第二个字段
/admin
 this is cat
 this is dog
/bin
/sbin
/var/adm
/var/spool/lpd
/sbin
/sbin
awk: cmd. line:1: (FILENAME=passwd FNR=10) fatal: attempt to access field -1

[root@localhost opt]# awk -F: '{print $1,NR}' passwd #NR显示行号
admin 1
 this is cat 2
 this is dog 3
bin 4
daemon 5
adm 6
lp 7
sync 8
shutdown 9
 10

\t 排序对齐


 

[root@localhost opt]# awk -F: '(NR%2)==0{print $1}' passwd  #打印偶数行的第一列
 this is cat
bin
adm
sync

[root@localhost opt]# awk -F: '(NR%2)==1{print $1}' passwd  #打印偶数行的第一列
admin
 this is dog
daemon
lp
shutdown

[root@localhost opt]# awk -F: 'NR==1,NR==3{print $1}' passwd #打印第一到第三行第一列
admin
 this is cat
 this is dog
[root@localhost opt]# awk -F: 'NR==1||NR==3{print $1}' passwd  #打印第一行和第三行第一列
admin
 this is dog

[root@localhost opt]# awk -F: 'NR>=2&&NR<=5{print NR,$0}' passwd  #打印2到5行显示行号
2  this is cat
3  this is dog
4 bin:x:1:1:bin:/bin:/sbin/nologin
5 daemon:x:2:2:daemon:/sbin:/sbin/nologin

[root@localhost opt]# awk -F: '$3>1000{print}' /etc/passwd  #打印以冒号做分割符第三列大于1000的行
nfsnobody:x:65534:65534:Anonymous NFS User:/var/lib/nfs:/sbin/nologin
user1:x:1001:1001::/home/user1:/bin/bash
user2:x:1002:1002::/opt/aa:/bin/bash
user4:x:1003:1003::/home/user4:/bin/bash
user5:x:1004:1004::/home/user5:/bin/bash
nginx:x:1005:1005::/home/nginx:/sbin/nologin
mysql:x:1006:1007::/home/mysql:/sbin/nologin

[root@localhost opt]# ifconfig ens33|awk 'NR==2{print $2}' #打印第二行中以空格做分割符的第二列
192.168.18.100

四,sort,uniq,和tr工具

1,sort工具

sort 是一个以行为单位对文件内容进行排序的工具,也可以根据不同的数据类型来排序。例如数据和字符的排序就不一样。sort 命令的语法为“sort [选项] 参数”,其中常用的选项包括以下几种。

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

2,uniq工具

 Uniq 工具在 Linux 系统中通常与 sort 命令结合使用,用于报告或者忽略文件中的重复行。具体的命令语法格式为:uniq [选项] 参数。其中常用选项包括以下几种。

    • -c:进行计数;
    • -d:仅显示重复行;
    • -u:仅显示出现一次的行。

3,tr工具

tr 命令常用来对来自标准输入的字符进行替换、压缩和删除。可以将一组字符替换之后变成另一组字符,经常用来编写优美的单行命令,作用很强大。

tr 具体的命令语法格式为:tr [选项] [参数]

其常用选项包括以下内容。

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

五,实例

1,提取下面的字段中的 IP 地址和时间


58.87.87.99 - - [09/Jun/2020:03:42:43 +0800] "POST /wp-cron.php?
doing_wp_cron=1591645363.2316548824310302734375 HTTP/1.1" ""sendfileon
128.14.209.154 - - [09/Jun/2020:03:42:43 +0800] "GET / HTTP/1.1" ""sendfileon
64.90.40.100 - - [09/Jun/2020:03:43:11 +0800] "GET /wp-login.php HTTP/1.1"
""sendfileo

将文件复制到a.txt中

以[和空格做分割符打印第1,5列删除第二行后再删除第4行

[root@localhost opt]# cat a.txt|awk -F'[[ ]' '{print $1,$5}'|sed '2d'|sed '4d' 
58.87.87.99 09/Jun/2020:03:42:43
128.14.209.154 09/Jun/2020:03:42:43
64.90.40.100 09/Jun/2020:03:43:11

2,提取host.txt主机名后再放回host.txt文件
1 www.kgc.com
2 mail.kgc.com
3 ftp.kgc.com
4 linux.kgc.com
5 blog.kgc.com

以空格和点做分割符打印第二列重定向到host.txt

[root@localhost opt]# cat host.txt|awk -F'[ .]' '{print $2}' >>host.txt
[root@localhost opt]# cat b.txt
1 www.kgc.com
2 mail.kgc.com
3 ftp.kgc.com
4 linux.kgc.com
5 blog.kgc.com
www
mail
ftp
linux
blog
 

3.提取出字符串Yd$C@M05MB%9&Bdh7dq+YVixp3vpw中的所有数字

egrep过滤出数字

[root@localhost opt]# echo "Yd$C@M05MB%9&Bdh7dq+YVixp3vpw" |egrep -o "[0-9]"
0
5
9
7
3
 

4.提取主机名并放入原文件
http://mail.kgc.com/index.html
http://www.kgc.com/test.html
http://study.kgc.com/index.html
http://blog.kgc.com/index.html
http://www.kgc.com/images/logo.jpg
http://blog.kgc.com/20080102.html
http://www.kgc.com/images/kgc.jpg

将文件放入host.txt中以/和点做分隔符提取第三列重定向到源文件host.txt

[root@localhost opt]# cat host.txt|awk -F'[/.]' '{print $3}'>>host.txt 
[root@localhost opt]# cat host.txt 
http://mail.kgc.com/index.html
http://www.kgc.com/test.html
http://study.kgc.com/index.html
http://blog.kgc.com/index.html
http://www.kgc.com/images/logo.jpg
http://blog.kgc.com/20080102.html
http://www.kgc.com/images/kgc.jpg
mail
www
study
blog
www
blog
www
 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Linux三剑客指的是 awksedgrepawk 是一种用来处理文本文件的工具,它可以根据指定的模式进自动分割并进数据处理。 sed 是一种流编辑器,它可以对文本文件进替换、删除和插入操作。 grep 是一种文本搜索工具,它可以在文本文件中搜索指定的字符串。 ### 回答2: Linux三剑客,分别是awksedgrep,它们是Linux系统中非常重要的命令工具,它们通常被称为文本处理工具。这些工具通常被用于筛选、搜索和处理文本文件。 grep是一种常见的文本搜索工具,可以在文件和文件夹中搜索指定的字符串或正则表达式grep可以搜索多个文件并返回匹配的输出。它是处理日志文件或查找匹配模式的最佳工具之一。 sed是一种流编辑器,可以按照处理文本文件。它可以通过替换、删除和插入操作来修改文件内容。在大型文件中查找并替换模式是sed的主要作用。该工具通常在文本文件中提取有用信息是常用。 awk是一种强大的文本操作工具,可以分析大型文本文件并对其进处理。该工具可以遍历和列,并提供强大的文本处理工具,如计算、过滤和转换数据。awk的处理速度非常快,适用于处理大型数据文件。 Linux三剑客awk是最强大的工具,它可以执复杂的文本数据操作和转换,可大大简化开发和管理过程。sed主要用于简单的文本数据过滤和替换,而grep主要用于搜索文件和定位特定。 总之,Linux三剑客在文本数据处理方面具有不可替代的重要作用。对于Linux操作系统的开发人员和管理员来说,熟练使用这些工具可以提高他们的工作效率,使他们更容易管理和操作文本文件。 ### 回答3: Linux三剑客awk sed grep是我们在日常工作中经常使用的三个命令。它们都属于文本处理工具,可以用于查找、处理、分析文本文件等。 首先,grep是最常用的文本搜索工具。grep可以用来快速查找文件中指定的字符串或正则表达式,并将包含该字符串或正则表达式打印出来。常用的命令有grep、egrep和fgrep。比如,我们可以使用grep命令来查找一个文件中包含指定关键字的,可以使用egrep来支持正则表达式搜索,使用fgrep来进快速搜索,不支持正则表达式。 其次,sed是一种流编辑器,主要用于对文本文件进替换、删除、添加、插入等操作。sed命令可以通过管道(|)将多个命令组合起来,从而进复杂的文本操作。sed可以快速完成对文本文件的修改操作,比如替换文件中的某些内容、删除特定的、在文件中插入新的文本等。sed的命令形式是“command", 比如"s/old/new/g",表示将old替换成new。 最后,awk是一种强大的文本处理工具,主要用于在文本文件中查找、处理以及格式化特定的字段。和grepsed不同的是,awk更加灵活,可以在处理过程中做到数据过滤和加工,对于大数据的处理特别有用。awk命令的常用语法是"pattern {action}"。其中,pattern代表要匹配的模式,而action代表模式匹配时需要执的动作,我们可以在其中添加处理语句来对文件进各种处理操作,比如计算、统计、格式化等。 综上所述,Linux三剑客awk sed grep是我们在文本处理工作中不可或缺的三个工具,不同的工具可以用于处理不同的文本操作,也可以用于搭配使用,以完成更加复杂的文本处理工作。对于需要经常处理文本的人员来说,掌握这些工具是非常必要的。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值