目录:
- egrep 支持扩展正则表达式的grep命令
- head 查看文件的前N行
- tail 查看文件的后N行
- alias 查看和设置别名
- unalias 取消别名
- seq生成序列
- sed 流编辑器,实现对文件的增删改查
- awk过滤,输出内容
- rmdir 删除空目录
- tree 显示目录树
- man 帮助命令
- –help 简单的帮助命令
- uname查看系统
- stat详细查看文件和目录的信息
- rz接收命令
egrep 支持扩展正则表达式的grep命令
与grep类似
主要参数:
-v 排除内容
–color=auto 对过滤的字符串加颜色
-i 不区分大小写
-o 只显示匹配到的内容
-B 除了显示匹配的一行之外,并显示该行之前的N行
-A 除了显示匹配的一行之外,并显示该行之后的N行
-C 除了显示匹配的一行之外,并显示该行之前后各N行
示例:
egrep -v jeff jeff.txt
egrep -w “oldboy” jeff.txt
head 查看文件的前N行
主要选项:
-n 后面接数字,表示查看前几行(也可以不加)
注意:head默认查看10行
示例:
head -5 /etc/passwd
tail 查看文件的后N行
主要选项:
-n 后面接数字,表示查看几行(也可以不加)
-f(循环读取)监视filename文件的尾部内容(默认10行,相当于增加参数-n 10)
刷新显示在屏幕上,退出按下ctrl+c
注意:tail默认查看10行
示例:
[root@localhost ~]# tail -f /var/log/lastlog
alias 查看和设置别名
查看别名,直接输入alias。
设置别名:alias cp='cp -i'
alias rm='echo “this command does not allow to ues”'
别名的配置文件:/etc/profile或者/etc/bashrc 全局生效
~/.bashrc #当前用户生效
unalias 取消别名
示例:
unalias cp
seq生成序列
编写shell时需要
主要选项:
-s 指定分隔符
-w 输出同宽数列,不足的位数用0补齐
示例:
seq -s : 10
1:2:3:4:5:6:7:8:9:10
seq 100 >jeff.txt
cat jeff.txt
1
2
....100
sed 流编辑器,实现对文件的增删改查
编辑命令:
d:删除 #sed ‘2,3’d /etc/passwd
p:打印输出
a:在行后面追加文本,支持使用\n实现多行追加
i:在行前面插入文本,支持使用\n实现多行插入
c:把匹配到的行替换为此处指定的文本
w:保存模式空间匹配到的行至指定的文件中
r:读取指定文件的内容至当前文件被模式匹配到的行后面并且文件合并
!:条件取反
s///:查找替换,其分隔符可自行指定,常用的有s@@@,s###等
替换标记:g 全局替换
主要选项:
-n 取消默认输出,把我想输出的内容输出到屏幕上
-i 修改文件内容并且会破坏软链接和硬链接
-e 多项编辑
-f 每行一个编辑命令
-r 支持使用扩展正则表达式
示例:
[root@localhost ~]# sed -n '20,30'p /etc/passwd #打印20-30行内容
[root@localhost ~]# sed -i "s#jeff#jeff1#g" jeff.txt #将jeff替换为jeff1全局替换
注意:
- sed 's#内容#替换的内容#g jeff.txt
- sed里面有小p,前面必须接参数-n
awk过滤,输出内容
区域:
$就是取什么什么引用 $1 表示第一列,$2 第二列,依次类推。但是
0
表
示
整
行
F
S
=
=
区
域
分
隔
符
,
默
认
是
空
格
R
S
=
=
每
个
记
录
读
入
的
时
候
的
分
隔
符
(
行
的
结
束
标
识
)
N
R
=
=
行
号
,
记
录
的
数
。
N
F
=
=
N
F
表
示
记
录
中
的
区
域
(
列
)
数
量
,
0表示整行 FS==区域分隔符,默认是空格 RS==每个记录读入的时候的分隔符(行的结束标识) NR==行号,记录的数。 NF==NF表示记录中的区域(列)数量,
0表示整行FS==区域分隔符,默认是空格RS==每个记录读入的时候的分隔符(行的结束标识)NR==行号,记录的数。NF==NF表示记录中的区域(列)数量,NF表示取最后一列
awk默认以空格为分隔符
BEGIN模块在awk读取文件之前就执行,一般用来定义我们的内置变量(预定义变量:FS,RS)
END模块就是END在awk读取完所有文件的时候,再执行END模块,一般用来输出一个结果(累加,数组的结果)
awk编程思想:
1.先处理,最后再END模块输出
2.BEGIN模块用于awk内置变量FS,RS的赋值,在awk执行前
3.END模块用来最后输出,统计信息
awk几种运算表达式:a=a+1或者a++ a=a+2或者a+=2 a+=$0
主要参数:-F 指定分隔符 比如说指定:为分隔符,那么:相当于一把菜刀,把数据切成一块一块,这个就是-F的作用
在linux里面==等于等号。一个=在linux里面相当于赋值
示例:
[root@localhost ~]# awk 'NR>19 && NR<31' jeff.txt #输出20-30行
[root@localhost ~]# awk 'NR==20,NR==30' jeff.txt #输出20-30行
# 以:为分隔符,取第一行的第六列
[root@localhost ~]# awk -F ":" 'NR==1 {print $6}' /etc/passwd
# 以:为分隔符,取第一到第十行的第3、5、7列
[root@localhost ~]# awk -F "[:]+" 'NR==1,NR==10 {print $3,$5,$7}' /etc/passwd
# 通过管道传入
cat /etc/passwd|awk -F "[ :]+" 'NR==10,NR==20 {print $3}'
awk 'BEGIN{RS=":"} {print NR,$0}' passwd
awk 'BEGIN{RS=":"} {print NR,$0}' passwd
awk 'BEGIN{RS="[:/0-9 |\n]+"}{print $0}' passwd | sort | uniq -c | sort -rn 统计单词数
awk -F "[ /]+" '$1~/^(ftp|http|ssh)$/{print $1,$2}' /etc/services
awk -F "[:]+" '$3>15{a=a+1}END{print a}' awkfile.txt
awk 'BEGIN{oldboy["a"]="xujun";olboy["b"]="xiaoyu";oldboy["c"]="wo"
awk '{print NR,$0}' xujun.txt
print oldboy["a"]
print oldbot["b"]
print oldboy["c"]}' 这个案列引用了数组的概念:
1.awk数组的元素名(苹果名)可以是字符串
2.字符串要使用双引号引起来
echo oldboy{01..10}|xargs -n 1|awk '{print "echo "$0" >>/tmp/oldboy.txt && useradd "$0" && pa=$(mkpasswd|cut -c 1-5) && echo $pa|passwd --stdin "$0"|echo $pa >>/tmp/oldboy.txt"}'|bash 批量创建用户和随机密码
awk -F "[: ]+" '/Dan/{print $5}' reg.txt 已Dan开头的行,并且匹配第五列
awk -F "[ :]+" '$3~/^138/{print $1,$3}' reg.txt 已138开头的手机号码,取人的名字和号码(这里的~表示匹配的意思)
awk -F "[ :]+" '$3!~/^138/{print $1,$2":"$3}' reg.txt 匹配不已138开头的手机号码和人的名字
awk -F "[ :]+" '!/138/{print $1,$2":"$3}' reg.txt 匹配不已138开头的手机号码和人的名字
awk -F "[ :]+" '$1~/C|E/{print $1,$2}' reg.txt 已C或E开头的人名
awk -F "[ :]+" '$3~/(1|5)$/{print $1,$2}' reg.txt 已结尾为1或者5的手机数字,然后取对应的人名
awk 'NR==2||NR==3||NR==9{print NR,$0}' jeff.txt或者awk 'NR==2;NR==3;NR==9{print NR,$0}' jeff.txt
2 bin:x:1:1:bin:/bin:/sbin/nologin
3 daemon:x:2:2:daemon:/sbin:/sbin/nologin
9 mail:x:8:12:mail:/var/spool/mail:/sbin/nologin 取第二行,第三行,第九行
awk 'BEGIN{a="abcd";print a}' awk中字母会被认为是变量,如果真的要给一个变量赋值,使用双引号
awk '/^$/{i=i+1}END{print i}' /etc/services 统计空行数量
seq 100|awk '{s=s+$0}'END'{print s}'
awk 'BEGIN{oldboy["a"]="oldgirl";oldboy["b"]="jeff";oldboy["c"]="oldbaby"
for(police in oldboy)
print police,oldboy[police]
}'
a oldgirl
b jeff
c oldbaby (awk数组)
awk -F "[/]+" '{ceshi[$2]=ceshi[$2]+1}'END'{for(police in ceshi)print police,ceshi[police]}' ceshi.txt (数组)
mp3.etiantian.org 1
post.etiantian.org 2
www.etiantian.org 3
awk '{a[$1]+=$2}END{for(i in a)print i,a[i]}' shuzu.txt “a[$1]=a[$1]+$2”=”a[$1]+=$2”
awk小结:
- NR行号,存放着每个记录的号,读取新行时候自动+1
- RS是输入数据的记录的分隔符,简单理解就是可以指定每个记录的结尾标志
- 用RS替换\n
- RS作用就是表示一个记录的结束
- FS标识着每个区域的结束
- awk只有模式(条件)的时候,会默认输出整行($0)
- $1/正则表达式-开始/,$3/正则结束/ 行,记录
- awk中字母会被认为是变量,如果真的要给一个变量赋值,使用双引号
rmdir 删除空目录
主要选项:-p 删除某目录后,如果其父目录为空,则一并删除
示例:
[root@localhost ~]# rmdir -p jeff1/jeff2
tree 显示目录树
主要选项:
-a 显示所有文件和目录
-d 只显示目录
-L 后面接上数字,表示只显示几层树结构
-f 为每个文件和目录显示完整的路径
-F 可以用来区分文件和目录
-i 不以阶梯状列出文件或目录名称
示例:
[root@localhost ~]# tree -d -L 1 /etc # 只显示一层目录
man 帮助命令
当要搜索某个关键字的时候,输入/,然后在输入关键字搜索
其中n这个快捷键是向下翻所查找的关键字的内容,大写N是向上查找
示例:
man cp
–help 简单的帮助命令
示例:
cp --help
uname查看系统
主要选项:
-m 查看系统是几位操作系统
-r 查看系统的内核版本
-a 查看详细的系统内核版本和系统的操作系统
示例:
[root@localhost ~]# uname -a
Linux localhost.localdomain 3.10.0-229.el7.x86_64 #1 SMP Fri Mar 6 11:36:42 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux
stat详细查看文件和目录的信息
示例:
[root@localhost ~]# stat jeff.txt
File: ‘jeff.txt’
Size: 292 Blocks: 8 IO Block: 4096 regular file
Device: fd00h/64768d Inode: 74023944 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Context: unconfined_u:object_r:admin_home_t:s0
Access: 2019-06-12 17:01:24.613827956 +0800
Modify: 2019-06-12 17:01:19.805885585 +0800
Change: 2019-06-12 17:01:19.805885585 +0800
Birth: -
rz接收命令
假如系统里面没有这个命令,则使用yum install lrzsz -y来安装次命令
主要参数:-y 覆盖
示例:
直接输入rz
注意:新版的xshell支持直接从windows把文件拖进xshell里,但是前提必须安装了rz