变量什么是通配符

什么是通配符  时间:2021-04-11  阅读:()
1Linux操作系统文本过滤2主要内容和学习要求能够熟练运用grep命令掌握sed流编辑器学会使用awk编程3grep是Linux下使用最广泛的命令之一,其作用是在一个或多个文件中查找某个字符模式所在的行,并将结果输出到屏幕上.
grep命令不会对输入文件进行任何修改或影响grep家族grep家族由grep、egrep和fgrep组成:grep:标准grep命令,主要讨论此命令.
egrep:扩展grep,支持基本及扩展的正则表达式.
fgrep:固定grep(fixedgrep),也称快速grep(fastgrep),按字面解释所有的字符,即正则表达式中的元字符不会被特殊处理.
这里的"快速"并不是指速度快.
4grep命令的一般形式grep[选项]patternfile1file2.
.
.
grep-fpatternfilefile1file2.
.
.
grep的使用zpattern:可以是正则表达式(用单引号括起来)、或字符串(加双引号)、或一个单词.
zfile1file2.
.
.
:文件名列表,作为grep命令的输入;grep的输入也可以来自标准输入或管道;可以把匹配模式写入到一个文件中,每行写一个,然后使用-f选项,将该匹配模式传递给grep命令5不显示错误信息-s反向查找,即只显示不包含匹配模式的行-v不区分大小写-i查询多个文件时,不显示文件名-h查询多个文件时,只输出包含匹配模式的文件的文件名-l显示匹配的行及行号-n只输出匹配的行的总数-cgrep–i'an*'datafilegrep常用选项6grep命令应用举例查询多个文件,可以使用通配符"*"grep"math2"*.
txtgrep"12"*反向匹配psaux|grep"ssh"|grep–v"grep"匹配空行grep-n'^$'datafilegrep-v'^$'datafile>datafile27精确匹配单词:\grep'west\>'datafilegrep'\'datafilegrep命令应用举例z找出所有包含以north开头的单词的行z找出所有包含以west结尾的单词的行z找出所有包含north单词的行8递归搜索目录中的所有文件:-rgrep-r"north"datafile~/Teaching/linux/关于某个字符连续出现次数的匹配grep'o\{2,\}'helloworld'o\{2,4\}','o\{2,4\}','lo\{2,4\}'grep命令应用举例9其它grep'^n'datafilegrep'y$'datafilegrep'r\.
'datafilegrep'^[we]'datafilegrep–i'ss*'datafilegrep–n'[a-z]\{9\}'datafilegrep–c'\'datafilegrep命令应用举例10ls–l|grep'^d'如果传递给grep的文件名参数中有目录的话,需使用"-d"选项grep-d[ACTION]directory_name其中ACTION可以是read:把目录文件当作普通文件来读取skip:目录将被忽略而跳过recurse:递归的方式读取目录下的每一个文件,可以用选项"-r"代替"-drecurse"grep-rl"eth0"/etcgrep与管道11使用egrep的主要好处是,它在使用grep提供的正则表达式元字符基础上增加了更多的元字符,见下表,但不能使用\{\}.
egrep增加的元字符在Linux下:egrep=grep-Eegrep命令匹配零个或一个前一字符匹配str1或str2str1|str2字符组()匹配一个或多个前一字符+注意星号*和问号在shell通配符和正则表达式中的区别12egrep'WE+'datafileegrep'WE'datafileegrep'Sh|u'datafileegrep'S(h|u)'datafilefgrep命令fgrep的使用方法与grep类似,但对正则表达式中的任何元字符都不做特殊处理.
fgrep'^n'datafileegrep举例与fgrep13sed是一个精简的、非交互式的编辑器,它在命令行中输入编辑命令和指定文件名,然后在屏幕上查看输出.
sed是什么sed如何工作sed逐行处理文件(或输入),并将输出结果发送到屏幕.
即:sed从输入(可以是文件或其它标准输入)中读取一行,将之拷贝到一个编辑缓冲区,按指定的sed编辑命令进行处理,编辑完后将其发送到屏幕上,然后把这行从编辑缓冲区中删除,读取下面一行.
重复此过程直到全部处理结束.
sed只是对文件在内存中的副本进行操作,所以sed不会修改输入文件的内容.
sed总是输出到标准输出,可以使用重定向将sed的输出保存到文件中.
流编辑器sed14在命令行中直接调用sed[-n][-e]'sed_cmd'input_filez-n:缺省情况下,sed在将下一行读入缓冲区之前,自动输出行缓冲区中的内容.
此选项可以关闭自动输出.
z-e:允许调用多条sed命令,如:sed-e'sed_cmd1'-e'sed_cmd2'input_filezsed_cmd:使用格式:[address]sed_edit_cmd(通常用单引号括起来),其中address为sed的行定位模式,用于指定将要被sed编辑的行.
如果省略,sed将编辑所有的行.
sed_edit_cmd为sed对被编辑行将要进行的编辑操作.
sed的三种调用方式zinput_file:sed编辑的文件列表,若省略,sed将从标准输入(重定向或管道)中读取输入.
15sed[选项]-fsed_script_fileinput_file将sed命令插入脚本文件,生成sed可执行脚本文件,在命令行中直接键入脚本文件名来执行.
#!
/bin/sed-fsed_cmd1.
.
.
.
.
.
例:sed–n–fsedfile1datafile例:.
/sedfile2.
sed-ndatafilesed的三种调用方式将sed命令插入脚本文件,然后调用16表示从包含模式1到包含模式2的行/模式1/,/模式2/反向选择,如m,n!
的结果与m,n相反!
表示第n行n表示从第n行到包含指定模式的行n,/pattern/表示从包含指定模式的行到第n行/pattern/,n查询包含指定模式的行.
如/disk/、/[a-z]//pattern/表示从第m行到第n行m,n表示最后一行$sed_cmd中address的定位方式定位方式17p:打印匹配行sed-n'1,3p'datafile//('1,3!
p')sed-n'$p'datafilesed-n'/north/p'datafile=:显示匹配行的行号sed-n'/north/='datafiled:删除匹配的行sed-n'/north/d'datafile常用的sed_edit_cmd常用sed编辑命令18a\:在指定行后面追加一行或多行文本,并显示添加的新内容,该命令主要用于sed脚本中.
sed-n'/eastern/a\newline1\newline2\newlineN'datafilei\:在指定行前追加一行或多行,并显示添加的新内容,使用格式同a\c\:用新文本替换指定的行,使用格式同a\l:显示指定行中所有字符,包括控制字符(非打印字符)sed-n'/west/l'datafile常用sed编辑命令19s:替换命令,使用格式为:sed-n's/west/east/gp'datafilezaddress:如果省略,表示编辑所有的行.
zg:全局替换zp:打印被修改后的行zwfname:将被替换后的行内容写到指定的文件中sed-n's/Aanny/Anndy/wnewdata'datafilesed's/[0-9][0-9]$/&.
5/'datafile&符号用在替换字符串中时,代表被替换的字符串常用sed编辑命令[address]s/old/new/[gpw]20r:读文件,将另外一个文件中的内容附加到指定行后.
sed-n'$rnewdata'datafilew:写文件,将指定行写入到另外一个文件中.
sed-n'/west/wnewdata'datafilen:将指定行的下面一行读入编辑缓冲区.
sed-n'/eastern/{n;s/AM/Archie/p}'datafile对指定行同时使用多个sed编辑命令时,需用大括号"{}"括起来,命令之间用分号";"格开.
注意与-e选项的区别常用sed编辑命令21q:退出,读取到指定行后退出sed.
sed'/east/{s/east/west/;q}'datafile写文件w在指定行后面追加文本a\读取指定行的下面一行n在指定行前面追加文本i\qrls退出sed读文件显示指定行中所有字符替换命令用新文本替换指定的行c\打印匹配行p删除匹配的行d显示匹配行的行号=常见的sed编辑命令小结常见的sed编辑命令小结22在sed_cmd中可以使用shell变量,此时应使用双引号myvar="west"sed–n"/${myvar}/p"datafile如何输入控制字符,如:回车、Esc、F1等以输入回车(^M)为例:先按Ctrl+v,释放按下的两个键后,按下对应的功能键(Enter键)即可.
sed支持shell变量的使用shell变量的使用23打印所有不包含north的行'/north/!
p'打印所有包含north的行'/north/p'在每行的最前面添加百分号%'s/^/%/g'将连续多个空格替换为一个空格命令中*/前有三个空格,后面是一个空格's/*//g'删除每行的第一个字符,同's/.
//''s/^.
//g'把第3行到第5行中每行的第一个d改成D'3,5s/d/D/'删除以句点结尾的行中末尾的句点's/\.
$//g'删除空行'/^$/d'删除行首空格(命令中^*之间有两个空格)'s/^*//g'一些sed行命令集24zawk是一种用于处理数据和生成报告的编程语言zawk可以在命令行中进行一些简单的操作,也可以被写成脚本来处理较大的应用问题zawk与grep、sed结合使用,将使shell编程更加容易zLinux下使用的awk是gawkawk是什么awk逐行扫描输入(可以是文件或管道等),按给定的模式查找出匹配的行,然后对这些行执行awk命令指定的操作.
awk如何工作与sed一样,awk不会修改输入文件的内容.
可以使用重定向将awk的输出保存到文件中.
awk介绍25在命令行键入命令:awk[-F字段分隔符]'awk_script'input_file若不指定字段分隔符,则使用环境变量IFS的值(通常为空格)将awk命令插入脚本文件awd_script,然后调用:将awk命令插入脚本文件,生成awk可执行脚本文件,然后在命令行中直接键入脚本文件名来执行.
#!
/bin/awk-fawk_cmd1.
.
.
.
.
.
awk的三种调用方式awk-fawd_scriptinput_file26awk_script可以由一条或多条awk_cmd组成,每条awk_cmd各占一行.
awk'BEGIN{actions}/pattern1/{actions}.
.
.
.
.
.
/patternN/{actions}END{actions}'input_fileawk_cmd中的/pattern/和{actions}可以省略,但不能同时省略;/pattern/省略时表示对所有的输入行执行指定的actions;{actions}省略时表示打印匹配行.
awk的三种调用方式每个awk_cmd由两部分组成:/pattern/{actions}awk命令的一般形式:其中BEGIN{actions}和END{actions}是可选的注意BEGIN和END都是大写字母.
27⑦awk处理完所有的输入后,若存在END,执行相应的actions.
awk的执行过程①如果存在BEGIN,awk首先执行它指定的actions②awk从输入中读取一行,称为一条输入记录③awk将读入的记录分割成数个字段,并将第一个字段放入变量$1中,第二个放入变量$2中,以此类推;$0表示整条记录;字段分隔符可以通过选项-F指定,否则使用缺省的分隔符.
④把当前输入记录依次与每一个awk_cmd中pattern比较:如果相匹配,就执行对应的actions;如果不匹配,就跳过对应的actions,直到完成所有的awk_cmd⑤当一条输入记录处理完毕后,awk读取输入的下一行,重复上面的处理过程,直到所有输入全部处理完毕.
⑥如果输入是文件列表,awk将按顺序处理列表中的每个文件.
28awk'/Mar/{print$1,$3}'shippedawk'{print$1,$3}'shippedawk'/Mar/'shippedawk'BEGIN{print"Mondata"}/Mar/{print$1,$3}'shippedawk'/Mar/{print$1,$3}END{print"OK"}'shippedawk-F:-fawkfile1employees2awk举例29①使用正则表达式:/rexp/,如/^A/、/A[0-9]*/awk中正则表达式中常用到的元字符有:字符组()只匹配行尾(可以看成是行尾的标志)$一个单字符后紧跟*,匹配0个或多个此字符*匹配[]内的任意一个字符([^]反向匹配)[]用来屏蔽一个元字符的特殊含义\匹配任意单个字符.
匹配零个或一个前一字符匹配一个或多个前一字符+匹配str1或str2str1|str2只匹配行首(可以看成是行首的标志)^awk中的模式(pattern)匹配模式匹配30②使用布尔(比较)表达式,表达式的值为真时执行相应的操作(actions)z表达式中可以使用变量(如字段变量$1,$2等)和/rexp/z表达式中的运算符有关系运算符:匹配运算符:~!
~x~/rexp/如果x匹配/rexp/,则返回真;x!
~/rexp/如果x不匹配/rexp/,则返回真.
awk'$2>20{print$0}'shippedawk'$4~/^6/{print$0}'shipped模式匹配31expr1&&expr2两个表达式的值都为真时,返回真expr1||expr2两个表达式中有一个的值为真时,返回真!
expr表达式的值为假时,返回真awk'($2"output"}'datafile2awk'BEGIN{"date"|getlined;printd}'字段分隔符字段分隔符、重定向和管道33操作由一条或多条语句或者命令组成,语句、命令之间用分号";"隔开.
操作中还可以使用流程控制结构的语句awk命令zexit:使awk停止执行而跳出.
若存在END语句,则执行END指定的actionsAWK中的操作ACTIONSzprint输出列表:打印字符串、变量或表达式,输出列表中各参数之间用逗号隔开;若用空格隔开,打印时各输出之间没有空格zprintf([格式控制符],输出列表):格式化打印,语法与C语言中的printf函数类似znext:停止处理当前记录,开始读取和处理下一条记录znextfile:强迫awk停止处理当前的输入文件而处理输入文件列表中的下一个文件34z直接赋值:如果值是字符串,需加双引号.
awk'BEGIN{x=1;y=x;z="OK";print"x="x,"y="y,"z="z}'z用表达式赋值:数值表达式:num1operatornum2其中operator可以是当num1或num2是字符串时,awk视其值为0条件表达式:AB:C当A为真时表达式的值为B,否则为Cawk也支持以下赋值操作符:awk语句:主要是赋值语句AWK语句35zif(expr){actions}[elseif{actions}](可以有多个elseif语句)[else{actions}]zwhile(expr){actions}zdo{actions}while(expr)zfor(init_val;test_cond;incr_val){actions}zbreak:跳出for,while和do-while循环zcontinue:跳过本次循环的剩余部分,直接进入下一轮循环流控制结构举例:awkfile2awk中的流控制结构(基本上是用C语言的语法)流控制36在awk_script中的表达式中要经常使用变量.
awk的变量基本可以分为:字段变量,内置变量和自定义变量.
字段变量:$0,$1,$2,.
.
.
可以创建新的输出字段,比如:当前输入记录被分割为8个字段,这时可以通过对变量$9(或$9之后的字段变量)赋值而增加输出字段,NF的值也将随之变化.
awk'{$6=3*$2+$3;print}'shippedAWK中的变量在awk执行过程中,字段变量的值是动态变化的.
但可以修改这些字段变量的值,被修改的字段值可以反映到awk的输出中.
字段变量支持变量名替换.
如$NF表示最后一个字段37ARGC:命令行参数个数(实际就是输入文件的数目加1)ARGIND:当前被处理的文件在数组ARGV内的索引ARGV:命令行参数数组FILENAME:当前输入文件的文件名FNR:已经被awk读取过的记录(行)的总数目FS:输入记录的字段分隔符(缺省是空格和制表符)NF:当前行或记录的字段数NR:对当前输入文件而言,已被awk读取过的记录(行)的数目OFMT:数字的输出格式(缺省是%.
6g)OFS:输出记录的字段分隔符(缺省是空格)ORS:输出记录间的分隔符(缺省是NEWLINE)RS:输入记录间的分隔符(缺省是NEWLINE)用于存储awk工作时的各种参数,这些变量的值会随着awk程序的运行而动态的变化,常见的有:内置变量38在表达式中出现不带双引号的字符串都被视为变量自定义变量变量定义varname=valuez变量名由字母、数字和下划线组成,但不能以数字开头zawk变量无需声明,直接赋值即完成变量的定义和初始化zawk变量可以是数值变量或字符串变量zawk可以从表达式的上下文推导出变量的数据类型如果自定义变量在使用前没有被赋值,缺省值为0或空字符串39awk'{if($3zvar的值在awk开始对输入的第一条记录应用awk_script前传入.
如果在awk_script中已经对某个变量赋值,那么命令行上的赋值无效.
z在awk脚本程序中不能直接使用shell的变量.
z可以向awk可执行脚本传递变量的值,与命令行类似,即awk_ex_scriptvar1=val1var2=val2.
.
.
filescat/etc/passwd|awk'BEGIN{FS=":"}{if($1==user){print}}'user=$USER如何向命令行awk程序传递变量的值变量传递awk'awk_script'var1=val1var2=val2.
.
.
files40①常见awk内置数值函数int(x):取整数部份,朝0的方向做舍去.
sqrt(x):正的平方根.
exp(x):以e为底的指数函数.
log(x):自然对数.
sin(x)、cos(x):正弦、余弦.
atan2(y,x):求y/x的arctan值,单位是弧度.
rand():得到一个随机数(平均分布在0和1之间)srand(x):设定产生随机数的seed为xAWK内置函数41②常见awk内置字符串函数index(str,substr):返回子串substr在字符串str中第一次出现的位置,若找不到,则返回值为0awk'BEGIN{printindex("peanut","an")}'awk'BEGIN{printmatch("hello",/l[^l]/)}'内置字符串函数sprintf(format,exp1,.
.
.
):返回一个指定格式的表达式,格式format与printf的打印格式类似(不在屏幕上输出)match(str,rexp):返回模式rexp在字符串str中第一次出现的位置,如果str中不包含rexp,则返回值0length(str):返回字符串str的字符个数42sub(rexp,sub_str,target):在目标串target中寻找第一个能够匹配正则表达式rexp的子串,并用字符串sub_str替换该子串.
若没有指定目标串,则在整个记录中查找awk'BEGIN{str="water,water";sub(/at/,"ith",str);\printstr}'substr(str,start,len):返回str的从指定位置start开始长度为len个字符的子串,如果len省略,则返回从start位置开始至结束位置的所有字符.
awk'BEGIN{printsubstr("awksedgrep",5)}'内置字符串函数gsub(rexp,sub_str,target):与sub类似,但gsub替换所有匹配的子串,即全局替换.
43awk'BEGIN{split("11/15/2005",date,"/");\printdate[2]}'awk'BEGIN{printtolower("MiXeDCaSe123")}'内置字符串函数split(str,array,fs):使用由fs指定的分隔符将字符串str拆分成一个数组array,并返回数组的下标数tolower(str):将字符串str中的大写字母改为小写字母toupper(str):将字符串str中的小写字母改为大写字母44③常见awk内置系统函数close(filename)将输入或输出的文件filename关闭.
system(command)此函数允许调用操作系统的指令,执行完毕后返回awkawk'BEGIN{system("ls")}'内置系统函数45functionfun_name(parameter_list){body-of-function//函数体,是awk语句块}zparameter_list是以逗号分隔的参数列表z自定义函数可以在awk程序的任何地方定义z函数名可包括字母、数字、下标线,但不可以数字开头z调用自定义的函数与调用内置函数的方法一样awk'{print"sum=",SquareSum($2,$3)}\functionSquareSum(x,y){\sum=x*x+y*y;returnsum\}'shippedAWK的自定义函数46数组使用前,无需预先定义,也不必指定数组元素个数访问数组的元素for(elementinarray_name)print\array_name[element]经常使用循环来访问数组元素awk'BEGIN{print\split("123#456#789",mya,"#");\for(iinmya){printmya[i]}}'AWK中的数组47使用字符串或正则表达式时,有时需要在输出中加入一新行或一个特殊字符.
这时就需要字符串屏蔽.
八进制值ASCII码新行tab键\ddd\n\t回车键\r走纸换页\f任意其他特殊字符.
如:\\为反斜线符号\c退格键\bawk中常用的字符串屏蔽序列awk'BEGIN{print\"\nMay\tDay\n\nMay\t\104\141\171"}'字符串屏蔽48基本上和C语言的语法类似printf([格式控制符],参数列表)参数列表中可以有变量、数值数据或字符串,用逗号隔开格式控制符:%[-][w][.
p]fmtz%:标识一个格式控制符的开始,不可省略z-:表示参数输出时左对齐,可省略zw:一个数字,表示参数输出时占用域的宽度,可省略z.
p:p是一个数值,表示最大字符串长度或小数位位数,可省略zfmt:一个小写字母,表示输出参数的数据类型,不可省略AWK输出函数PRINTF49字符串s自动决定用e或fg十六进制数浮点数,科学记数法整数xed八进制数o浮点数,如12.
3fASCII字符c常见的fmtecho"65"|awk'{printf"%c\n",$0}'awk'BEGIN{printf"%.
4f\n",999}'awk'BEGIN{printf\"2number:%8.
4f%8.
2f",999,888}'AWK输出函数PRINTF50为了避免碰到awk错误,要注意以下事项:确保整个awk_script用单引号括起来确保awk_script内所有引号都成对出现确保用花括号括起动作语句,用圆括号括起条件语句如果使用字符串,要保证字符串被双引号括起来(在模式中除外)awk语言学起来可能有些复杂,但使用它来编写一行命令或小脚本并不太难.
awk是shell编程的一个重要工具.
在shell命令或编程中,可以使用awk强大的文本处理能力.
注意事项

妮妮云36元,美国VPS洛杉矶 8核 8G 36元/月,香港葵湾 8核 8G

妮妮云的来历妮妮云是 789 陈总 张总 三方共同投资建立的网站 本着“良心 便宜 稳定”的初衷 为小白用户避免被坑妮妮云的市场定位妮妮云主要代理市场稳定速度的云服务器产品,避免新手购买云服务器的时候众多商家不知道如何选择,妮妮云就帮你选择好了产品,无需承担购买风险,不用担心出现被跑路 被诈骗的情况。妮妮云的售后保证妮妮云退款 通过于合作商的友好协商,云服务器提供2天内全额退款,超过2天不退款 物...

青果云(590元/年),美国vps洛杉矶CN2 GIA主机测评 1核1G 10M

青果网络QG.NET定位为高效多云管理服务商,已拥有工信部颁发的全网云计算/CDN/IDC/ISP/IP-VPN等多项资质,是CNNIC/APNIC联盟的成员之一,2019年荣获国家高薪技术企业、福建省省级高新技术企业双项荣誉。那么青果网络作为国内主流的IDC厂商之一,那么其旗下美国洛杉矶CN2 GIA线路云服务器到底怎么样?官方网站:https://www.qg.net/CPU内存系统盘流量宽带...

LOCVPS:美国XEN架构VPS七折,全场八折,日本/新加坡XEN架构月付29.6元起

LOCVPS发来了针对XEN架构VPS的促销方案,其中美国洛杉矶机房7折,其余日本/新加坡/中国香港等机房全部8折,优惠后日本/新加坡机房XEN VPS月付仅29.6元起。这是成立较久的一家国人VPS服务商,目前提供美国洛杉矶(MC/C3)、和中国香港(邦联、沙田电信、大埔)、日本(东京、大阪)、新加坡、德国和荷兰等机房VPS主机,基于XEN或者KVM虚拟架构,均选择国内访问线路不错的机房,适合建...

什么是通配符为你推荐
布局cssmagento既然magento那么强大,为什么还有那么多用zencart的?zencart还有发展的空间吗?360邮箱邮箱地址指的是什么?sqlserver2000挂起安装sqlserver2000时总提示有挂起操作!netshwinsockresetwin7系统我在输入netsh winsock reset后错误代码11003求大神解决上不了网邮件esetyixingjia合家欢是一种什么东西?徐州商标介绍徐州的一种产品我爱试用网我发现我对性爱这个话题好敏感!来吧看谁能把我下面说湿了?要200以上的才好评啊!瑞东集团道恩集团的集团简介
域名是什么 重庆域名注册 免费动态域名 腾讯云数据库 服务器cpu性能排行 html空间 促正网秒杀 坐公交投2700元 789电视 hkg 息壤代理 免费phpmysql空间 重庆双线服务器托管 搜索引擎提交入口 电信托管 卡巴斯基免费试用版 web服务器是什么 新加坡空间 iki 主机返佣 更多