您的位置:首页 > 运维架构 > Shell

shell学习之路:shell基础大全2

2015-07-03 13:18 666 查看
原文:http://note.youdao.com/share/?id=cd2ad6e6d5db2b347f92958efc2bdbc1&type=note

正则表达式与通配符:

一、介绍:
1.正则表达式用来在文件中匹配符合条件的字符串,正则是包含匹配。grep、awk、sed等命令可以支持正则表达式
2.通配符用来匹配符合条件的文件名,通配符是完全匹配,ls、find、cp这些命令不支持正则表达式,所以只能用使用shell自己的通配符来进行匹配了。
二、基础正则表达式:
grep "下列" demo.txt
".*":匹配任意字符任意次
"^$":匹配空行
"a*":匹配a零次或多次,所以可以配所有内容
"^a":匹配以a开头的行
"aa*"匹配两个连续的a的行

元字符
作用
*
前一个字符匹配零次或任意多次
.匹配除了换行符以外任意一个字符
^匹配行首,例如:^hello会匹配hello开头的行。
$匹配行尾,例如:hello$会匹配以hello结尾的行。
[]匹配中括号中指定的任意一个字符,只匹配一个字符。
例如:[aoeiu]匹配任意一个元音字母;[0-9]匹配任意一个数字[a-z][0-9]匹配小写字母和一位数字构成的两个字符的字符串
[^]匹配除中括号的字符以外的任意一个字符,例如:[^0-9]匹配任意一位非数字的字符;[^a-z]表示匹配任意一位非小写字母的字符
\转移符。用于取消对特殊符号的含义

\{n\}表示其前面的字符敲好出现n次,例如:[0-9]\{4\}匹配4位数字;[1][3-8][0-9]\{9\}匹配手机号码(第一位必须以1开头第二位必须是3和8之间的第三位以后是1到9中的数字匹配9次)

\{n,m\}表示其前面的字符至少出现n次,最多出现m次。例如:[a-z]\{6,8\}匹配小写字母6到8次(位)



字符截取:
cut字段提取命令
介绍: 缺点是无法以空格作为分隔符的应用
[root@localhost]#cut[选项] 文件名
选项:
-f列号: 提取第几列
-d分隔符: 按照指定分隔符冯列



我想提取系统中除root以外的能够登录系统的用户:
[root@localhostA1 demo]# cat /etc/passwd | grep /bin/bash | grep -v root | cut -d ":" -f 1
fengtaotao

printf命令(格式化输出命令)
介绍:
[root@localhost]#printf '输出类型输出格式' 输出内容
输出类型:
%ns: 输出字符串,n是数字指代输出几个字符

%ni: 输出整数。n是数字指代输出几个数字
%m.nf: 输出浮点数,m和n是数字,指代输出的整数位数和小数位数。如%8.2f表示输出8位数其中有两位小数,6位整数。
输出格式:
\a

输出警告声音

\b输出退格键,也就是backspace键
\f

清楚屏幕
\n

换行

\r回车,也就是Enter键

\t水平输出退格键,也就是Tab键

\v

垂直输出退格键,也就是Tab键
例如:

[root@localhost]# printf "%s\t %s\t %s\t %s\t %s\t %s\n" $(cat student.txt) 这样才能正确的输出格式



awk命令:
介绍:
[root@localhost]#awk '条件1{动作1} 条件2{动作2}...' 文件名
条件(Pattern)
一般使用关系表达式作为条件
x>10 判断变量x是否大于10
x>=10 大于等于
x<=10 小于等于
动作(Action)
格式化输出
流程控制语句
实例:
[root@localhost]# awk '{printf $2 "\t" $6"\n" }' student.txt
上述命令是:直接动作 将student.txt的$2第二列 格式\t为tab 与 第6列 +\n换行的输出格式出来





BEGIN条件


FS内置变量 修改分隔符





END:在所有内容 执行完后在执行一条END中的动作



所有数据 处理完成后会在打印一条aaaaaa数据

sed命令:
介绍:sed是一种几乎包括在所有unix平台(包括Linux)的轻量级流编辑器。sed主要是用来将数据进行选取、替换、删除、新增的命令。
[root@localhost]#sed [选项]'[动作]'文件名
选项:
-n: 一般sed命令会把所有数据都输出到屏幕,如果加入此选择,则只会把经过sed命令处理的行输出到屏幕。(只显示动作内容)
-e: 允许对输入数据应用多条sed命令编辑
-i: 用sed的修改结果直接修改读取数据的文件,而不是由屏幕输出(写入)
动作:

a\

追加,在当前行后添加一行或多行。添加多行时,除最后一行外,每行末尾需要用"\"代表数据末完结。
c\

行替换,用c后面的字符串替换原数据行,替换多行时,除最后一行外,每行末尾需用"\"代表数据未完结。
i\

插入,在当前行插入一行或多行。插入多行时,出最后一行外,每行末尾需要用"\"代表数据未完结
d

删除,删除指定行

p

打印print 输出指定的行
s

字符替换,用一个字符串替换另外一个字符串。格式为"行范围s/旧字符串/新字符串/g" (和vim中的替换格式类似)。
示例:1



示例:2



示例3



字符处理命令:
1.排序命令sort
[root@localhost]#sort[选项] 文件名
选项:
-f: 忽略大小写
-n: 以数值型进行排序,默认使用字符串型排序
-r: 反向排序
-t: 指定分隔符,默认是分隔符是制表符
-k n[,m]: 按照指定的字段范围排序。从第n字段开始,m字段结束(默认到行尾)

[root@localhost]# sort /etc/passwd 排序用户信息文件
[root@localhost]#sort -r /etc/passwd 倒序以字母倒序



统计命令wc:

[root@localhost~]#wc[选项] 文件名
选项:
-1: 只统计行
-w: 只统计单词
-m: 只统计字符
[root@localhost]#wc /etc/passwod
[root@localhost]#wc -l /etc/passwod
[root@localhost]#wc -lm /etc/passwod
条件判断:
两种判断格式:
[root@localhost~]#test -e /root/install.log
[root@localhost~]#[ -e /root/install.log ]
例如: echo $?来判断上一个命令是否正确执行,正确返回0否则返回对应的数字



例如2:
[root@localhost]# [ -d /root ]&& echo 'yes' || echo "no"
yes
[root@localhost]# [ -f /root/install.log ] && echo 'yes' || echo 'no'
yes
如果[]中的判断成立那么输出yes否者输出no 用逻辑与和逻辑或
1.按照文件类型进行判断:



2.按照文件权限进行判断



3.两个文件之间进行比较



例如:



4.两个整数之间比较





5字符串的判断





6;多从条件判断





内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: