ImageVerifierCode 换一换
格式:DOC , 页数:6 ,大小:30KB ,
资源ID:4766991      下载积分:5 金币
快捷注册下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

开通VIP
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.zixin.com.cn/docdown/4766991.html】到电脑端继续下载(重复下载【60天内】不扣币)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

开通VIP折扣优惠下载文档

            查看会员权益                  [ 下载后找不到文档?]

填表反馈(24小时):  下载求助     关注领币    退款申请

开具发票请登录PC端进行申请

   平台协调中心        【在线客服】        免费申请共赢上传

权利声明

1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前可先查看【教您几个在下载文档中可以更好的避免被坑】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时联系平台进行协调解决,联系【微信客服】、【QQ客服】,若有其他问题请点击或扫码反馈【服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【版权申诉】”,意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:0574-28810668;投诉电话:18658249818。

注意事项

本文(linux_awk_完全手册范本.doc)为本站上传会员【二***】主动上传,咨信网仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知咨信网(发送邮件至1219186828@qq.com、拔打电话4009-655-100或【 微信客服】、【 QQ客服】),核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载【60天内】不扣币。 服务填表

linux_awk_完全手册范本.doc

1、 1.什么是awk? 你可能对UNIX比较熟悉,但你可能对awk很陌生,这一点也不奇怪,的确,与其优秀的功能相比,awk还远没达到它应有的知名度。awk是什么?与其它大多数UNIX命令不同的是,从名字上看,我们不可能知道awk的功能:它既不是具有独立意义的英文单词,也不是几个相关单词的缩写。事实上,awk是三个人名的缩写,他们是:Aho、 Weinberg和Kernighan。正是这三个人创造了awk---一个优秀的样式扫描与处理工具。 AWK的功能是什么?与sed和grep很相似,awk是一种样式扫描与处理工具。但其功能却大大强于sed和grep。awk提供了极其

2、强大的功能:它几乎可以完成 grep和sed所能完成的全部工作,同时,它还可以可以进行样式装入、流控制、数学运算符、进程控制语句甚至于置的变量和函数。它具备了一个完整的语言所应具有的几乎所有精美特性。实际上,awk的确拥有自己的语言:awk程序设计语言,awk的三位创建者已将它正式定义为:样式扫描和处理语言。 2.为什么使用awk? 即使如此,你也许仍然会问,我为什么要使用awk? 使用awk的第一个理由是基于文本的样式扫描和处理是我们经常做的工作,awk所做的工作有些象数据库,但与数据库不同的是,它处理的是文本文件,这些文件没有专门的存储格式,普通的人们就能编辑、阅读、理解和处理它们。而数据

3、库文件往往具有特殊的存储格式,这使得它们必须用数据库处理程序来处理它们。既然这种类似于数据库的处理工作我们经常会遇到,我们就应当找到处理它们的简便易行的方法,UNIX有很多这方面的工具,例如sed 、grep、sort以及find等等,awk是其中十分优秀的一种。 使用awk的第二个理由是awk是一个简单的工具,当然这是相对于其强大的功能来说的。的确,UNIX有许多优秀的工具,例如UNIX天然的开发工具C语言及其延续C++就非常的优秀。但相对于它们来说,awk完成同样的功能要方便和简捷得多。这首先是因为awk提供了适应多种需要的解决方案:从解决简单问题的awk命令行到复杂而精巧的awk程序设计

4、语言,这样做的好处是,你可以不必用复杂的方法去解决本来很简单的问题。例如,你可以用一个命令行解决简单的问题,而C不行,即使一个再简单的程序,C语言也必须经过编写、编译的全过程。其次,awk本身是解释执行的,这就使得awk程序不必经过编译的过程,同时,这也使得它与shell script程序能够很好的契合。最后,awk本身较C语言简单,虽然awk吸收了C语言很多优秀的成分,熟悉C语言会对学习awk有很大的帮助,但 awk本身不须要会使用C语言——一种功能强大但需要大量时间学习才能掌握其技巧的开发工具。 使用awk的第三个理由是awk是一个容易获得的工具。与C和C++语言不同,awk只有一个文件<

5、/bin/awk>,而且几乎每个版本的UNIX都提供各自版本的awk,你完全不必费心去想如何获得awk。但C语言却不是这样,虽然C语言是UNIX天然的开发工具,但这个开发工具却是单独发行的,换言之,你必须为你的UNIX版本的C语言开发工具单独付费〔当然使用D版者除外,获得并安装它,然后你才可以使用它。 基于以上理由,再加上awk强大的功能,我们有理由说,如果你要处理与文本样式扫描相关的工作,awk应该是你的第一选择。在这里有一个可遵循的一般原则:如果你用普通的shell工具或shell script有困难的话,试试awk,如果awk仍不能解决问题,则便用C语言,如果C语言仍然失败,则移至C++

6、 3.awk的调用方式 前面曾经说过,awk提供了适应多种需要的不同解决方案,它们是: 一、 awk命令行,你可以象使用普通UNIX命令一样使用awk,在命令行中你也可以使用awk程序设计语言,虽然awk支持多行的录入,但是录入长长的命令行并保证其正确无误却是一件令人头疼的事,因此,这种方法一般只用于解决简单的问题。当然,你也可以在shell script程序中引用awk命令行甚至awk程序脚本。 二、使用-f选项调用awk程序。awk允许将一段awk程序写入一个文本文件,然后在awk命令行中用-f选项调用并执行这段程序。具体的方法我们将在后面的awk语法中讲到。 三、利用命令解释器调用aw

7、k程序:利用UNIX支持的命令解释器功能,我们可以将一段awk程序写入文本文件,然后在它的第一行加上: #!/bin/awk -f 并赋予这个文本文件以执行的权限。这样做之后,你就可以在命令行中用类似于下面这样的方式调用并执行这段awk程序了。 awk脚本文本名 待处理文件 4.awk的语法: 与其它UNIX命令一样,awk拥有自己的语法: awk [ -F re] [parameter...] ['prog'] [-f progfile][in_file...] 参数说明: -F re:允许awk更改其字段分隔符。 parameter: 该参数帮助为不同的变量赋值。 'prog': awk的

8、程序语句段。这个语句段必须用单拓号:'和'括起,以防被shell解释。这个程序语句段的标准形式为: 'pattern {action}' 其中pattern参数可以是egrep正则表达式中的任何一个,它可以使用语法/re/再加上一些样式匹配技巧构成。与sed类似,你也可以使用","分开两样式以选择某个围。关于匹配的细节,你可以参考附录,如果仍不懂的话,找本UNIX书学学grep和sed〔本人是在学习ed时掌握匹配技术的。 action参数总是被大括号包围,它由一系统awk语句组成,各语句之间用";"分隔。awk解释它们,并在pattern给定的样式匹配的记录上执行其操作。与shell类似,你也

9、可以使用"#"作为注释符,它使"#"到行尾的容成为注释,在解释执行时,它们将被忽略。你可以省略pattern和 action之一,但不能两者同时省略,当省略pattern时没有样式匹配,表示对所有行〔记录均执行操作,省略action时执行缺省的操作——在标准输出上显示。 -f progfile:允许awk调用并执行progfile指定有程序文件。progfile是一个文本文件,他必须符合awk的语法。 in_file:awk的输入文件,awk允许对多个输入文件进行处理。值得注意的是awk不修改输入文件。如果未指定输入文件,awk将接受标准输入,并将结果显示在标准输出上。awk支持输入输出重定向

10、 5.awk的记录、字段与置变量: 前面说过,awk处理的工作与数据库的处理方式有相同之处,其相同处之一就是awk支持对记录和字段的处理,其中对字段的处理是grep和sed不能实现的,这也是awk优于二者的原因之一。在awk中,缺省的情况下总是将文本文件中的一行视为一个记录,而将一行中的某一部分作为记录中的一个字段。为了操作这些不同的字段,awk借用shell的方法,用1,2,3...这样的方式来顺序地表示行〔记录中的不同字段。特殊地,awk用0表示整个行〔记录。不同的字段之间是用称作分隔符的字符分隔开的。系统默认的分隔符是空格。awk允许在命令行中用-F re的形式来改变这个分隔符。事实上

11、awk用一个置的变量FS来记忆这个分隔符。awk中有好几个这样的置变量,例如,记录分隔符变量RS、当前工作的记录数NR等等,本文后面的附表列出了全部的置变量。这些置的变量可以在awk程序中引用或修改,例如,你可以利用NR变量在模式匹配中指定工作围,也可以通过修改记录分隔符RS让一个特殊字符而不是换行符作为记录的分隔符。 例:显示文本文件myfile中第七行到第十五行中以字符%分隔的第一字段,第三字段和第七字段: awk -F % 'NR==7,NR==15 {printf 1 3 7}' 6.awk的置函数 awk 之所以成为一种优秀的程序设计语言的原因之一是它吸收了某些优秀的程序设计语言〔

12、例如C语言的许多优点。这些优点之一就是置函数的使用,awk定义并支持了一系列的置函数,由于这些函数的使用,使得awk提供的功能更为完善和强大,例如,awk使用了一系列的字符串处理置函数<这些函数看起来与C 语言的字符串处理函数相似,其使用方式与C语言中的函数也相差无几>,正是由于这些置函数的使用,使awk处理字符串的功能更加强大。本文后面的附录中列有一般的awk所提供的置函数,这些置函数也许与你的awk版本有些出入,因此,在使用之前,最好参考一下你的系统中的联机帮助。 作为置函数的一个例子,我们将在这里介绍awk的printf函数,这个函数使得awk与c语言的输出相一致。实际上,awk中有许多

13、引用形式都是从C语言借用过来的。如果你熟悉C语言,你也许会记得其中的printf函数,它提供的强大格式输出功能曾经带我们许多的方便。幸运的是,我们在awk中又和它重逢了。awk中printf几乎与C语言中一模一样,如果你熟悉C语言的话,你完全可以照C语言的模式使用awk中的printf。因此在这里,我们只给出一个例子,如果你不熟悉的话,请随便找一本C语言的入门书翻翻。 例:显示文件myfile中的行号和第3字段: awk '{printf"%03d%s\n",NR,1}' myfile 7.在命令行使用awk 按照顺序,我们应当讲解awk程序设计的容了,但在讲解之前,我们将用一些例子来对前面的

14、知识进行回顾,这些例子都是在命令行中使用的,由此我们可以知道在命令行中使用awk是多么的方便。这样做的原因一方面是为下面的容作铺垫,另一方面是介绍一些解决简单问题的方法,我们完全没有必要用复杂的方法来解决简单的问题----既然awk提供了较为简单的方法的话。 例:显示文本文件mydoc匹配〔含有字符串"sun"的所有行。 awk '/sun/{print}' mydoc 由于显示整个记录〔全行是awk的缺省动作,因此可以省略action项。 awk '/sun/' mydoc 例:下面是一个较为复杂的匹配的示例: awk '/[Ss]un/,/[Mm]oon/ {print}' myfile 

15、它将显示第一个匹配Sun或sun的行与第一个匹配Moon或moon的行之间的行,并显示到标准输出上。 例:下面的示例显示了置变量和置函数length〔的使用: awk 'length<0>>80 {print NR}' myfile 该命令行将显示文本myfile中所有超过80个字符的行号,在这里,用0表示整个记录〔行,同时,置变量NR不使用标志符''。 例:作为一个较为实际的例子,我们假设要对UNIX中的用户进行安全性检查,方法是考察/etc下的passwd文件,检查其中的passwd字段〔第二字段是否为"*",如不为"*",则表示该用户没有设置密码,显示出这些用户名〔第一字段。我们可以用如

16、下语句实现: #awk -F: '2=="" {printf<"%s no password!\n",1' /etc/passwd 在这个示例中,passwd文件的字段分隔符是":",因此,必须用-F:来更改默认的字段分隔符,这个示例中也涉及到了置函数printf的使用。 8.awk的变量 如同其它程序设计语言一样,awk允许在程序语言中设置变量,事实上,提供变量的功能是程序设计语言的其本要求,不提供变量的程序设计语言本人还从未见过。 awk 提供两种变量,一种是awk置的变量,这前面我们已经讲过,需要着重指出的是,与后面提到的其它变量不同的是,在awk程序中引用置变量不需要使用标志符""〔回

17、忆一下前面讲过的NR的使用。awk提供的另一种变量是自定义变量。awk允许用户在awk程序语句中定义并调用自已的变量。当然这种变量不能与置变量及其它awk保留字相同,在awk中引用自定义变量必须在它前面加上标志符""。与C语言不同的是,awk中不需要对变量进行初始化, awk根据其在awk中第一次出现的形式和上下文确定其具体的数据类型。当变量类型不确定时,awk默认其为字符串类型。这里有一个技巧:如果你要让你的 awk程序知道你所使用的变量的明确类型,你应当在在程序中给它赋初值。在后面的实例中,我们将用到这一技巧。 运算与判断: 作为一种程序设计语言所应具有的特点之一,awk支持多种运算,这些

18、运算与C语言提供的几本相同:如+、-、*、/、%等等,同时,awk也支持C语言中类似++、--、+=、-=、=+、=-之类的功能,这给熟悉C语言的使用者编写awk程序带来了极大的方便。作为对运算功能的一种扩展,awk还提供了一系列置的运算函数〔如log、sqr、cos、sin等等和一些用于对字符串进行操作〔运算的函数〔如length、substr等等。这些函数的引用大大的提高了awk的运算功能。 作为对条件转移指令的一部分,关系判断是每种程序设计语言都具备的功能,awk也不例外。awk 中允许进行多种测试,如常用的==〔等于、!=〔不等于、>〔大于、<〔小于、>=〔大于等于、>=〔小于等于等等

19、同时,作为样式匹配,还提供了~〔匹配于和!~〔不匹配于判断。 作为对测试的一种扩充,awk也支持用逻辑运算符:!<非>、&&〔与、||〔或和括号〔进行多重判断,这大大增强了awk的功能。本文的附录中列出了awk所允许的运算、判断以及操作符的优先级。 9.awk的流程控制 流程控制语句是任何程序设计语言都不能缺少的部分。任何好的语言都有一些执行流程控制的语句。awk提供的完备的流程控制语句类似于C语言,这给我们编程带来了极大的方便。 1、BEGIN和END: 在awk 中两个特别的表达式,BEGIN和END,这两者都可用于pattern中〔参考前面的awk语法,提供BEGIN和END的作用是给

20、程序赋予初始状态和在程序结束之后执行一些扫尾的工作。任何在BEGIN之后列出的操作〔在{}将在awk开始扫描输入之前执行,而END之后列出的操作将在扫描完全部的输入之后执行。因此,通常使用BEGIN来显示变量和预置〔初始化变量,使用END来输出最终结果。 例:累计销售文件xs中的销售金额〔假设销售金额在记录的第三字段: awk >'BEGIN { FS=":";print "统计销售金额";total=0} >{print 3;total=total+3;} >END {printf "销售金额总计:%.2f",total}' sx 〔注:>是shell提供的第二提示符,如要在shell程序a

21、wk语句和awk语言中换行,则需在行尾加反斜杠\ 在这里,BEGIN预置了部变量FS〔字段分隔符和自定义变量total,同时在扫描之前显示出输出行头。而END则在扫描完成后打印出总合计。 2、流程控制语句 awk提供了完备的流程控制语句,其用法与C语言类似。下面我们一一加以说明: 2.1、if...else语句: 格式: if<表达式> 语句1 else 语句2 格式中"语句1"可以是多个语句,如果你为了方便awk判断也方便你自已阅读,你最好将多个语句用{}括起来。awk分枝结构允许嵌套,其格式为: if<表达式1 {if<表达式2 语句1 else 语句2 } 语句3 else {if<表达

22、式3> 语句4 else 语句5 } 语句6 当然实际操作过程中你可能不会用到如此复杂的分枝结构,这里只是为了给出其样式罢了。 2.2、while语句 格式为: while<表达式> 语句 2.3、do-while语句 格式为: do { 语句 }while<条件判断语句 2.4、for语句 格式为: for<初始表达式;终止条件;步长表达式> {语句} 在awk 的 while、do-while和for语句中允许使用break,continue语句来控制流程走向,也允许使用exit这样的语句来退出。break 中断当前正在执行的循环并跳到循环外执行下一条语句。continue从当前位置跳到循

23、环开始处执行。对于exit的执行有两种情况:当exit语句不在 END中时,任何操作中的exit命令表现得如同到了文件尾,所有模式或操作执行将停止,END模式中的操作被执行。而出现在END中的exit将导致程序终止。 例:为了 awk中的自定义函数 定义和调用用户自己的函数是几乎每个高级语言都具有的功能,awk也不例外,但原始的awk并不提供函数功能,只有在nawk或较新的awk版本中才可以增加函数。 函数的使用包含两部分:函数的定义与函数调用。其中函数定义又包括要执行的代码〔函数本身和从主程序代码传递到该函数的临时调用。 awk函数的定义方法如下: function 函数名<参数表>{ 函数

24、体 } 在gawk中允许将function省略为func,但其它版本的awk不允许。函数名必须是一个合法的标志符,参数表中可以不提供参数〔但在调用函数时函数名后的一对括号仍然是不可缺少的,也可以提供一个或多个参数。与C语言相似,awk的参数也是通过值来传递的。 在awk 中调用函数比较简单,其方法与C语言相似,但awk比C语言更为灵活,它不执行参数有效性检查。换句话说,在你调用函数时,可以列出比函数预计〔函数定义中规定的多或少的参数,多余的参数会被awk所忽略,而不足的参数,awk将它们置为缺省值0或空字符串,具体置为何值,将取决于参数的使用方式。 awk函数有两种返回方式:隐式返回和显式返回

25、当awk执行到函数的结尾时,它自动地返回到调用程序,这是函数是隐式返回的。如果需要在结束之前退出函数,可以明确地使用返回语句提前退出。方法是在函数中使用形如:return 返回值 格式的语句。 例:下面的例子演示了函数的使用。在这个示例中,定义了一个名为print_header的函数,该函数调用了两个参数FileName和PageNum, FileName参数传给函数当前使用的文件名,PageNum参数是当前页的页号。这个函数的功能是打印〔显示出当前文件的文件名,和当前页的页号。完成这个功能后,这个函数将返回下一页的页号。 nawk >'BEGIN{pageno=1;file=FILENAM

26、E >pageno=print_header;#调用函数print_header >printf<"当前页页号是:%d\n",pageno>; >} >#定义函数print_header >function print_header{ >printf<"%s %d\n",FileName,PageNum>; >PageNum++;return PageNUm; >} >}' myfile 执行这个程序将显示如下容: myfile 1 当前页页号是:2 awk高级输入输出 1.读取下一条记录: awk的next语句导致awk读取下一个

27、记录并完成模式匹配,然后立即执行相应的操作。通常它用匹配的模式执行操作中的代码。next导致这个记录的任何额外匹配模式被忽略。 2.简单地读取一条记录 awk 的 getline语句用于简单地读取一条记录。如果用户有一个数据记录类似两个物理记录,那么getline将尤其有用。它完成一般字段的分离<设置字段变量0 FNR NF NR>。如果成功则返回1,失败则返回0〔到达文件尾。如果需简单地读取一个文件,则可以编写以下代码: 例:示例getline的使用 {while { #process the inputted fields } } 也可以使getline保存输入数据

28、在一个字段中,而不是通过使用getline variable的形式处理一般字段。当使用这种方式时,NF被置成0,FNR和NR被增值。 用户也可以使用getline<"filename"方式从一个给定的文件中输入数据,而不是从命令行所列容输入数据。此时,getline将完成一般字段分离〔设置字段变量0和NF>。如果文件不存在,返回-1,成功,返回1,返回0表示失败。用户可以从给定文件中读取数据到一个变量中,也可以用stdin<标准输入设备或一个包含这个文件名的变量代替filename。值得注意的是当使用这种方式时不修改FNR和NR。 另一种使用getline语句的方法是从UNIX命令接受输入,例

29、如下面的例子: 例:示例从UNIX命令接受输入 {while<"who -u"|getline> { #process each line from the who command } } 当然,也可以使用如下形式: "command" | getline variable 3.关闭文件: awk中允许在程序中关闭一个输入或输出文件,方法是使用awk的close语句。 close<"filename" filename可以是getline打开的文件〔也可以是stdin,包含文件名的变量或者getline使用的确切命令。或一个输出文件〔可以是stdout,包含文件名的变量或使用管道的确切命令。 

30、4.输出到一个文件: awk中允许用如下方式将结果输出到一个文件: printf<"hello word!\n">"datafile" 或 printf<"hello word!\n">>"datafile" 5.输出到一个命令 awk中允许用如下方式将结果输出到一个命令: printf<"hello word!\n"|"sort-t','" awk与shell script混合编程 因为awk可以作为一个shell命令使用,因此awk能与shell批处理程序很好的融合在一起,这给实现awk与shell程序的混合编程提供了可能。实现混合编程的关键是awk与shell script之间的对话,换言之,就是awk与shell script之间的信息交流:awk从shell script中获取所需的信息〔通常是变量的值、在awk中执行shell命令行、shell script将命令执行的结果送给awk处理以及shell scri 6 / 6

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服