目录
- 第一部分 快捷键
-
第二部分文件和目录操作命令
- 1.1 date / useradd
- 1.2 echo 调用变量
- 1.3 whoami 查看用户名
- 1.4 tab命令补全
- 1.5 history 历史命令
- 1.6 alias 别名
- 1.7 ls获取命令帮助help
- 1.8 cd:切换目录change directory
- 1.9 mkdir:创建目录make directory
- 2.0 touch创建文件
- 2.1 tree 树状显示目录文件结构
- 2.2复制命令cp
- 2.3 移动命令mv
- 2.4 删除rm
- 2.5 cat查看文件内容
- 2.6 查看命令more和less**
- 2.7 查看文件前n行 head
- 2.8查看尾部tail
- 3.0 find文件查找
- 3.1.文件的上传下载
- 3.2.从外网下载文件wget
- 3.3curl文件下载
- 3.4.查找命令which
- 3.5.字符处理命令-排序sort
- 3.6.字符处理-去重uniq
- 3.7.字符处理-截取cut
- 3.8.字符处理-统计wc
- 3.9.tr替换
- 命令之三剑客
第一部分 快捷键
ctrl+a | 将光标跳转至行首 |
---|---|
ctrl + e | 将光标跳转至行末 |
Ctrl + w | 以空格为单位,将当前光标位置之前的内容删除 |
.ctrl +u | 将当前光标位置之前的内容全部删除 |
ctrl + l | 清屏 |
ctrl + c | 终止当前命令 |
ctrl + d | 退出,断开当前连接(exit,logout) |
ctrl + z | 挂起,放后台执行 |
ctrl + r | 搜索历史命令 |
ctrl+s | 锁屏 |
Ctrl+q | 解锁 |
Ctrl+左右 | 按照单词跳转光标 |
esc + . | 瞬间显示出上一条命令,最后的内容,以空格分隔 |
Ctrl+y | 将粘贴板上的内容粘贴出来,配合u,k,w使用 |
第二部分文件和目录操作命令
1.1 date / useradd
date | 获取当前时间 |
---|---|
useradd | 创建用户 |
例如:
命令方式: [root@gong ~]# date #获取当前时间
2019年 06月 14日 星期五 15:47 CST
[root@gong ~]# useradd gjy
\#增加用户名
1.2 echo 调用变量
echo | 在bash shell中调用变量$ |
---|---|
查看当前命令解释符
[root@gong ~]# echo $ps1
[\u@\h \w]\$
echo:在bash shell中调用变量 $
1.3 whoami 查看用户名
whoami | 查看用户名 |
---|---|
查看当前用户(whoamai:查看当前登录的用户)
[root@centos7 ~]# whoamai
root
root:超级系统用户名,也是当前系统的用户
root之外的都是普通用户
1.4 tab命令补全
tab | 命令补全,选项补全,参数补全 |
---|---|
例如:、 [root@centos7 ~]# ifc
\#按下tab键会自动补全,若按一下tab没反应,就需要按两下tab键,列出所有if开头的命令
ifcfg ifcconfig
[root@centos7 ~]# ifconfig
[root@centos7 ~]# ls /etc/sysconfig/network-scripts/ifcfg-eth0 #网络配置名称
1.5 history 历史命令
history | 列出历史命令。 |
---|---|
-w | 把历史文件写入文件 |
-c | 清空命令历史记录,不会清空文件 |
-d | 指定一条记录删除 |
-w | 保存历史命令 |
!! | 执行上一条命令 |
!n | 执行历史命令中的第n条命令 |
例如:
查看历史记录:
[root@gong ~]# history
清空历史记录
[root@gong ~]# history -c
\#指定一条历史记录删除
[root@gong ~]# history -d 23
\#保存历史命令
[root@gong ~]# history -w
\#执行上一条命令
[root@gong ~]# !!
\#执行上一条ls相关命令
[root@gong ~]# !ls
\#执行历史命令中的第23条命令
[root@gong ~]# !23
1.6 alias 别名
alias | 创建命令别名 alias 别名=“命令” |
---|---|
unalias | 取消文件别名 unlias 别名 |
例如:定义临时别名,查看网络是否可以通,ping 百度,只对当前shell 生效
[root@gong ~]# alias tong="ping baidu.com" #需用双引号,单引号输出的结果是引号内的字符串
PING baidu.com (123.125.114.144) 56(84) bytes of data.
64 bytes from 123.125.114.144: icmp_seq=1 ttl=128 time=44.2 ms
64 bytes from 123.125.114.144: icmp_seq=2 ttl=128 time=47.5 ms
64 bytes from 123.125.114.144: icmp_seq=3 ttl=128 time=46.3 ms
......
查看所有定义的别名
[root@gong ~]# alias
alias cp='cp -i'
alias l.='ls -d .* --color=auto'
alias ll='ls -l --color=auto'
alias ls='ls --color=auto'
alias mv='mv -i'
alias rm='rm -i'
alias tong='ping baidu.com'
......
取消别名
[root@gong ~]# unalias oldboy
[root@gong ~]# oldboy
-bash: tong: command not found
永久生效
[root@gong ~]# vim /etc/bashrc
alias oldboy="ping baidu.com"
1.7 ls获取命令帮助help
Ls常见选项 | 全拼list,功能是列出目录的内容及其内容属性信息。 |
---|---|
-l | 以长格式方式显示文件或目录的详细内容 |
-a | 查看目录下的所有文件,包括隐藏文件 |
-d | 只显示目录名,而不显示目录里面的内容 |
-F | 给不同类型的文件加上不同的标记 |
-r | 倒叙 |
-t | 按照文件或目录的修改时间进行排序 |
-i | 显示文件的inode 号码 |
-h | 以人类可读的方式 |
获取ls命令的帮助
[root@gong ~]# ls --help
用法:ls[选项]...[文件]...
[root@gong ~]# man ls
1.8 cd:切换目录change directory
cd | 切换至当前用户家目录 |
---|---|
cd - | 切换上次所在目录 |
cd ~ | 切换至当前用户家目录 |
cd . | 代表当前目录,一般在拷贝、移动情况下使用 |
cd .. | 切换至当前目录的上级目录 |
1.9 mkdir:创建目录make directory
-m | 创建目录时,指定权限(很少用,几乎不用) |
---|---|
-p | 如果目录已存在则不会报错,递归创建 |
-v | 打印出创建过程信息 |
\#创建目录
[root@gong ~]# mkdir dir1
\#创建目录并给权限
[root@gong ~]# mkdir -m777 dir2
\#递归创建目录
[root@gong ~]# mkdir -p dir3/dir4/dir5
\#创建目录并显示信息
[root@gong ~]# mkdir -pv dir4/dir5/dir6
备注:rwx为7,read 读,write写,exec执行
最高权限为777,目录一般权限为755,文件一般权限为644
例如:
条命令建出以下的目录:
/home/zls
/home/abc
/home/abc/1
/home/abc/2
/home/abc/3
/home/abc/1/zls
/home/abc/2/zls
/home/abc/3/zls
/usr/local/abc
/data
/backup
/backup/abc
/abc
/abc/test
/abc/test/1
...
/abc/test/10
解答:
[root@gong ~]# mkdir /{home/{zls,abc/{1..3}/zls},usr/local/abc,data,backup/abc,abc/test/{1..10}} -pv
2.0 touch创建文件
Touch
语法:touch[选项]... 文件名...
创建文件,如果文件存在,不会覆盖内容,但是会修改创建时间
Linux中,一切皆文件
示例1:
[root@gong ~]# touch file
[root@gong ~]# touch file1 file2
[root@gong ~]# touch /home/zls/file3 file4
[root@gong ~]# touch file{5,6,7}
[root@gong ~]# touch file{10..100}
示例2:
[root@gong ~]# touch abc
[root@gong ~]# touch /oldboy/abc
Touch:cannot touch ‘/oldboy/abc’:no such file or directory
**注意:**
1.创建文件,必须要创建在一个存在的目录中
2.和创建目录不同的是,创建相同的文件不会报错
3.创建相同的文件,源文件内容不会被覆盖
4.在Linux当中一切皆文件
2.1 tree 树状显示目录文件结构
-l | 指定层级(level) |
---|---|
-d | 只查看目录 |
如果没有安装,则需要先安装:yum -y install tree
起始目录为 .
[root@gong ~]# tree 当前目录的tree结构
[root@gong ~]# tree / /目录下的所有文件,目录
[root@gong ~]# tree /home /home下的文件,目录
[root@gong ~]# tree -L 1 / /目录下的一级目录,开头不是 . ,是指定的层级
[root@gong ~]# tree -L -d 2 /usr/local 只查看/usr/local的二级目录,不看文件
2.2复制命令cp
cp | 复制 |
---|---|
-r | 递归拷贝,拷贝目录,连里面的东西一并拷贝 |
-p | 保持源文件的属性 |
-a | 拷贝目录并保持属性,和-rp一样 (用的最多 |
-rp | 递归拷贝并保持源文件的属性 |
-v | 显示复制的过程 |
-t | 交换目标和源文件的位置(意义不大) |
语法:
cp [OPTION]... 源文件 目标
cp [OPTION]... SOURCE... DIRECTORY
cp [OPTION]... -t DIRECTORY SOURCE...
[root@oldboyedu ~]# cp oldboy /usr/
cp: omitting directory ‘oldboy’
复制文件的过程:
[root@oldboyedu ~]# cp -v 123 456 789 /opt/
‘123’ -> ‘/opt/123’
‘456’ -> ‘/opt/456’
‘789’ -> ‘/opt/789’
cp可以修改名字,指定的目录不存在,也可以拷贝,但拷贝即改名
[root@gong ~]# cp /etc/sysconfig/network-scripts/{ifcfg-eth0,eth00}
把网卡配置还是配置到这个路径下,改名 eth00
[root@gong ~]# cp /etc/sysconfig/network-scripts/ifcfg-eth0{,.bak}
把网卡配置还是配置到这个路径下,改名ifcfg-eth0.bak(加后缀)
备注:{,.bak}=ifcfg-eth0,ifcfg-eth0.bak
2.3 移动命令mv
mv:移动 move (系统默认操作,alias可以查看,mv=mv-i)
语法:
mv [OPTION]... 源文件 目标
注意:
\#系统默认操作,alias可以查看,mv=mv-i,执行命令时系统会自动询问要不要移动
\mv 就不会询问
绝对路径执行命令:就是执行命令本身,不经过alias
命令前面加上转义符 \,也是执行命令本身,不经过alias
和cp一样
示例:
[root@gong ~]# mv file1 test1 #如果test1目录存在,file1直接放进
[root@gong ~]# touch file1 #创建文件file1
[root@gong ~]# echo 123>file 1 #输入123到file1文件中
[root@gong ~]# cat file1 #查看file1文件内容
[root@gong ~]# touch 1.txt #创建1.txt文件
[root@gong ~]# mv 1.txt /opt/ #文件可以直接移动
[root@gong ~]# mkdir oldboy #在当前目录下创建目录
[root@gong ~]# mv oldboy/ /opt/ #移动当前目录下的oldboy目录到/opt/目录下
总结:
1.如果目标是一个目录,就会把文件放入目录
2.文件,就会被覆盖
2.4 删除rm
rm 删除remove
语法:
-i | 交互,再删除前需要确认 |
---|---|
-r | 递归删除 |
-f | 强制删除(force) |
-v | 显示删除的过程 |
rm +文件 | 直接可以删除 |
rm+目录 | 不能直接删除,需加参数 rm -r |
删文件就最好不加-f, Linux中没有回收站,都是永久删除
最好给rm设置一个别名,禁止使用,再确认一下
禁止使用alias=rm - fr/
要想删除 加\
[root@gong ~]# \rm -fr #前面加\即可直接删除,不会询问
[root@gong ~]# rm - fr ./* #是删除/目录下的目录,文件
[root@gong ~]# rm - fr ./ * #中间有空格的话,也是会误操作,直接删/了
备注:
echo 'alias rm="echo '禁止使用rm'"' >> /etc/bashrc
source /etc/bashrc
再执行rm -fr /...
就会出现禁止使用
2.5 cat查看文件内容
cat:查看文件内容,会将文件的所有内容显示到屏幕
用法: cat[选项]...[文件]
-n | 查看内容并显示行号 |
---|---|
-A | 显示文件的结束符和tab键,,一行结束和空行都加$, $代表某一行的结束,包含-T -E-V |
-E | 显示文件的结束符 |
-T | 显示文件的tab键(^T) |
-b | 查看内容并显示行号,空行不显 |
> | 标准输出重定向,将目标文件的内容清空,再将输出结果追加到目标文件 |
>> | 标准输出追加重定向,将输出结果追加到目标文件的结尾,不会覆盖 |
示例:
[root@gong ~]# echo file1 >>123
[root@gong ~]# cat 123
file1
[root@gong ~]# cat 456
file2
[root@gong ~]# cat 123 456
file1
file2
[root@gong ~]# cat >> zls.txt << eof #eof=end of
eof #eof也可以换成jieshu或者其他,但必须首尾一致
[root@gong ~]# cat zls.txt #能获取到zls.txt的内容
了解:tac zls.txt
把内容反过来了,按行为单位,倒着显示内容
2.6 查看命令more和less**
more分页显示文件内容
空格或f | 向下翻页 |
---|---|
b | 向上翻页 |
/ | 搜索关键字 |
= | 显示当前光标所在行 |
q | 退出 |
-N(数字) | 每页显示几行 |
+N(数字) | 从第几行开始显示 |
显示完文件内容,会自动退出。
[root@oldboyedu ~]# more /etc/services
不可以操作,回车是下行,空格是翻页
按q退出
less
[root@oldboyedu ~]# less /etc/services
/ + 关键字 | 会高亮显示 |
---|---|
空格或f | 向下翻页 |
b | 向上翻页 |
q | 退出 |
n | 向下搜索 |
- N | 向上搜索(shift + n) ,给显示出来的内容加上行号 |
显示完文件,不会自动退出,按q退出后,会缩回文件内容
2.7 查看文件前n行 head
用法:
Head + 文件名
-n: 显示前n行,n为数字,n后面加数字
默认为前10行
[root@oldboyedu ~]# head /etc/services #默认为前10行
[root@oldboyedu ~]# head -n 20 /etc/services # Head -n 20 #查看前20行
[root@oldboyedu ~]# head -20 /etc/services #Head -20 #查看前20行
2.8查看尾部tail
用法:
tail+文件名
默认显示后10行
-f : 追踪文件末尾,相当于tailf
Tailf=tail -f 是一个单独的命令,追踪日志
-F :实时查看文件内容的更新,当文件不存在时,会一直的尝试
-n : 显示前n行,n为数字,n后面加数字
(n也可以不写,作用一样)
[root@centos7 ~]# tail -1 /etc/services #显示出/etc/servicces的最后一行
matahari 49000/tcp # Matahari Broker
3.0 find文件查找
[root@oldboyedu ~]# find / -type d -name "oldboy"
/root/oldboy
[root@oldboyedu ~]# find /root -name "*.txt"
/root/oldboy.txt
/root/file4.txt
/root/ip.txt
/root/file.txt
/root/file1.txt
/root/file2.txt
/root/file3.txt
[root@oldboyedu ~]# find /root -type f -name "*.txt"
/root/oldboy.txt
/root/file4.txt
/root/ip.txt
/root/file.txt
/root/file1.txt
/root/file2.txt
/root/file3.txt
3.1.文件的上传下载
需要下载安装包
[root@oldboyedu ~]# yum install -y lrzsz #安装包
rz:只能上传文件 (直接拖拽文件)
1)不支持上传超过4G的文件
2)不支持断点续传
rz不能上传目录,需要把目录压缩打包才可以上传
sz:下载文件
示例:sz filename
3.2.从外网下载文件wget
wget | 文件下载 |
---|---|
-O | 指定地址下载,更改名称 |
-T | 超时时间 |
-q | 安静下载(关闭wget输出) |
--spider | 网络爬虫 |
示例:
Wget http://www.baidu.com
如果没有,则安装:yum install -y wget
-O:指定下载的路径,可以改名
3.3curl文件下载
-o:指定下载的路径,可以改名
示例:
Curl -o http://www.baidu.com
3.4.查找命令which
Which查找系统目录下的命令(绝对路径)
[root@centos7 ~]# which rm
alias rm='rm -i'
/usr/bin/rm
了解
type -a 也可以查命令的路径
whereis也可以查命令的路径
[root@centos7 ~]# whereis rm
rm: /usr/bin/rm /usr/share/man/man1/rm.1.gz
[root@centos7 ~]# type -a rm
rm is aliased to `rm -i'
rm is /usr/bin/rm
[root@oldboyedu ~]# type -a ls
ls is aliased to `ls --color=auto'
ls is /usr/bin/ls
[root@oldboyedu ~]# type -a for
for is a shell keyword
3.5.字符处理命令-排序sort
-t | 指定分隔符 |
---|---|
-k | 指定第几列的内容(按分隔符),不指定分隔符,默认是空格为分隔符 |
-n | 按照阿拉伯数字的大小顺序排序 |
-r | 倒叙排序 |
输入文件
[root@centos7 ~]# cat >> sort.txt <<eof
\> A:d:8
\> E:x:2
\> B:c:6
\> eof
排序文件
[root@centos7 ~]# sort sort.txt
A:d:8
B:c:6
E:x:2
按照字母小写顺序排序
[root@centos7 ~]# sort -t ':' -k 2 sort.txt
B:c:6
A:d:8
E:x:2
按照字母小写顺序排序
[root@centos7 ~]# sort -t ':' -k 2 -n sort.txt
A:d:8
B:c:6
E:x:2
按照字母小写倒叙
[root@centos7 ~]# sort -t ':' -k 2 -n -r sort.txt
E:x:2
B:c:6
A:d:8
3.6.字符处理-去重uniq
去重相邻行,不相邻不会去重
-c | 显示去重后的数量(count) |
---|---|
-d | 只显示重复的行 |
-u | 只显示不重复的行 |
输入内容:
[root@centos7 ~]# cat >>unip.txt <<eof
\> abc
\> abc
\> 123
\> eof
文件去重(没有排序无法去重)
[root@centos7 ~]# uniq uniq.txt
abc
123
abc
123
排序文件
[root@centos7 ~]# sort uniq.txt
123
123
abc
Abc
先排序文件,后去重
[root@centos7 ~]# sort uniq.txt |uniq
123
abc
先排序文件,后去重并显示去重后的数量
[root@centos7 ~]# sort uniq.txt |uniq -c
2 123
2 abc
3.7.字符处理-截取cut
-d | 指定分隔符 |
---|---|
-f | 指定第几列 |
-c | 根据字符来取数据 |
输入内容
[root@centos7 ~]# cat >>info.txt <<eof
\> I’m gjy,20 years old qq 861962063
\> eof
\#以空格为分隔符,截取第二个,第六个字符
[root@centos7 ~]# cut -d ' ' -f 2,6 info.txt
gjy,20 861962063
以空格为分隔符,截取第二个,第六个,再以逗号为分隔符,截取第一个第二个
[root@centos7 ~]# cut -d ' ' -f 2,6 info.txt |cut -d ',' -f 1,2
gjy,20 861962063
[root@centos7 ~]# cut -d ' ' -f 2,6 info.txt |cut -c 1-3,8-16
gjy861962063
3.8.字符处理-统计wc
-l | 统计行数 |
---|---|
-c | 统计字节数 |
-w | 统计单词次数,也就是列数 |
示例:
[root@centos7 ~]# wc /etc/services
11176 61033 670293 /etc/services
统计字节:
[root@centos7 ~]# wc -c /etc/services
670293 /etc/services l
统计行数
[root@centos7 ~]# wc -l /etc/services
11176 /etc/services
统计列数
[root@centos7 ~]# wc -l /etc/services
11176 /etc/services
3.9.tr替换
[root@centos7 ~]# tr '1' 'o' <uniq.txt #1就全部替换成了o
abc
o23
abc
o23
[root@centos7 ~]# echo "1" >>uniq.txt #再追加一个 1
[root@centos7 ~]# tr '123' '0ld' <uniq.txt #单个对单个的替换
abc
0ld
abc
0ld
0
命令之三剑客
1. grep
grep | 过滤关键字 |
---|---|
-n | 显示行号 |
-o | 只显示关键字,不显示行号 和其他内容 |
-B | 显示前n行,n为数字(before) |
-A | 显示关键字的后n行,n为数字(affer) |
-C | 显示关键字的前后n行,n为数字(center)相当于 -B-A ( -B 1 -A1=-C1显示关键字的前后1行) |
-v | 取反 |
-w | 只匹配关键字(一整串的字符串) |
-r / -R | 递归过滤 |
-E | 支持多关键字,中间用|分隔 grep -E=egrep |
-i | 不区分大小写,忽略大小写 |
^ | 以什么开头 ‘^root’ |
$ | 以什么结尾 ‘root\(’ | | ^\) |
^[a-z] | 以a到z开头的 |
. | 代表字符 |
* | 代表所有 |
| | 管道符,将前面命令输出的结果交给后个 ,grep A passwd | grep -v ‘^tss’ |
-w 匹配字符串
[root@oldboyedu ~]# grep -w 'root' passwd
-c选项 统计行
#含root字符串的行
[root@oldboyedu ~]# grep -c 'root' passwd
#所有的行
[root@oldboyedu ~]# grep -c '.' passwd
-R / -r 结果一样,递归过滤,能过滤指定目录下所有文件
[root@oldboyedu ~]# grep -R 'root' ./
[root@oldboyedu ~]# grep -r 'root' ./
过滤出以11为开头的行
[root@oldboyedu ~]# grep -n '.' passwd |grep -w '^11'
-A 往下数n行,
#过滤出以11为开头的行,往下9行
[root@oldboyedu ~]# grep -n '.' passwd |grep -wA9 '^11'
#-B选项 往上数n行
#过滤出以11为开头的行,往上数9行所有行
[root@oldboyedu ~]# grep -n '.' passwd |grep -wB 9 '^11'
#-C选项 往上下同时数n 行
#过滤出以11为开头的行,往上数9行并且往下数9行所有行
[root@oldboyedu ~]# grep -n '.' passwd |grep -EwC9 '^11'
#过滤出以15,16为开头的行,往上数4行并且往下数4行所有行
[root@oldboyedu ~]# grep -n '.' /etc/passwd |grep -EwC4 '^1[56]'
正则:
^以什么开头
[root@oldboyedu ~]# grep '^r' passwd
$以什么结尾
[root@oldboyedu ~]# grep 'h$' passwd
#过滤空行,不含tab键的空行
[root@oldboyedu ~]# grep -n '^$' passwd
#过滤空行,含tab键
[root@oldboyedu ~]# grep -n '^\s*$' passwd
#.点匹配任意一个字符
[root@oldboyedu ~]# grep '.' test.log
[root@oldboyedu ~]# grep -o '.' test.log
#\ 转义,取消特殊字符的特殊含义。
#只过滤以点为结尾的行
[root@oldboyedu ~]# grep '\.$' oldboy.txt
#以m或者n开头的行
#[]表示多个字符串,会单个匹配[]里面的内容,[] [^] 的区别
#| 或者
#过滤出以m和n 为开头的行
[root@gjy ~]# grep -n '^[mn]' oldboy.txt
[root@gjy ~]# grep -n '^m|^n' oldboy.txt -E
#过滤出不以m和n 为开头的行
[root@gjy ~]# grep -nv '^[mn]' oldboy.txt
[root@gjy ~]# grep -n '^[^mn]' oldboy.txt
#过滤出mn 之外的其他字符所在行
[root@gjy ~]# grep -n '[^mn]' oldboy.txt
#*前面一个字符出现0次或0次以上
[root@oldboyedu ~]# grep -o '0' oldboy.txt
[root@oldboyedu ~]# grep -o '0*' oldboy.txt
#.* 表示所有的意思
[root@oldboyedu ~]# grep -o '.*' oldboy.txt
#取出文件中前17位在0-9之间
[root@gjy ~]# grep -En '[0-9]{17}' id.txt
#取出文件中前17位在0-9之间,后一位在0-9;a-X之间
[root@gjy ~]# grep -Eon '[0-9]{17}[0-9X]{1}' id.txt
#取出文件中前17位在0-8之间
[root@gjy ~]# grep -En '[0-8]{17}' id.txt
清理nginx配置文件
[root@oldboyedu ~]# grep -Ev '^\s*$|#' /etc/nginx/nginx.conf.default >nginx.conf
#查看配置文件
[root@oldboyedu ~]# grep '^[a-Z]' /etc/ssh/sshd_config
[root@oldboyedu ~]# grep -Ev '^$|#' /etc/ssh/sshd_config
2. sed 文本处理工具,三剑客之一
选项:
-n | 取消默认输出 |
---|---|
p | 打印当前内容 |
! | 取反 |
-i.bak | 先备份,再替换 |
d | 删除当前行 |
-i | 替换,修改原文件的内容 |
i | 插入文件内容 |
$ | 以什么结尾的行 |
a | 追加 |
s | 替换 |
g | 表示全局 |
; | 多条命令分隔符,取不连续的多行 |
-r | 支持扩展正则表达式使用 |
取行
#取单行
[root@oldboyedu ~]# sed -n '3p' passwd
bin:x:1:1:bin:/bin:/sbin/nologin
#取连续的多行(取第5到第10行)
[root@oldboyedu ~]# sed -n '5,10p' passwd
#取不连续的多行(取第5行和第10行)
[root@oldboyedu ~]# sed -n '5p;10p' passwd
#删除单行
[root@oldboyedu ~]# sed '2d' passwd
#删除连续的多行
[root@oldboyedu ~]# sed '2,10d' passwd
#删除不连续的多行
[root@oldboyedu ~]# sed '2d;10d' passwd
#排除,取反
[root@oldboyedu ~]# sed '2!p' passwd
#过滤字符串
[root@oldboyedu ~]# sed -n '/yy/p' sed.txt
104,$yy,CFO
#过滤多个(过滤含有oldboy和yy的行)
[root@oldboyedu ~]# sed -n '/oldboy/p ; /yy/p' sed.txt
[root@oldboyedu ~]# sed -nr '/oldboy|yy/p' sed.txt
#过滤多个连续的字符串
[root@oldboyedu ~]# sed -n '/oldboy/,/yy/p' sed.txt
#在第三行后面追加内容
[root@oldboyedu ~]# sed '3aoldboy' sed.txt
101,$oldboy,CEO
102,$zhangyao,CTO
103,$Alex,COO
oldboy
104,$yy,CFO
105,$feixue,CIO
#在第四行的上面插入内容
[root@oldboyedu ~]# sed '4ioldboy' sed.txt
#插入多行内容
[root@oldboyedu ~]# sed '4ioldboy\noldgirl' sed.txt
#追加多行内容
[root@oldboyedu ~]# sed '3aoldboy\noldgirl' sed.txt
#在结尾追加内容
[root@oldboyedu ~]# sed '$aoldboy' sed.txt
改文件,替换
#全局
[root@oldboyedu ~]# sed 's#oldboy#jinke#g' sed.txt
[root@oldboyedu ~]# sed -i.org 's#oldboy#jinke#g' sed.txt
#c 原位置替换
[root@oldboyedu ~]# sed '/^SELINUX=/c SELINUX=enforcing' /etc/sysconfig/selinux
#第一行到第五行的root替换
[root@oldboyedu ~]# sed '1,5s#root#oldboy#g' passwd
#替换第一行的root
[root@oldboyedu ~]# sed '1s#root#oldboy#g' passwd
#替换特殊字符使用转义
[root@oldboyedu ~]# sed 's#$#%#g' sed.txt
101,$jinke,CEO%
102,$zhangyao,CTO%
103,$Alex,COO%
104,$yy,CFO%
105,$feixue,CIO%
[root@oldboyedu ~]# sed 's#\$#%#g' sed.txt
101,%jinke,CEO
102,%zhangyao,CTO
103,%Alex,COO
104,%yy,CFO
105,%feixue,CIO
[root@oldboyedu ~]# sed 's/\/sbin\/nologin/oldboy/g' passwd
#后向引用
[root@oldboyedu ~]# ip a s eth0
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 00:0c:29:1d:ca:3a brd ff:ff:ff:ff:ff:ff
inet 10.0.0.150/24 brd 10.0.0.255 scope global noprefixroute eth0
valid_lft forever preferred_lft forever
inet6 fe80::80b2:dc89:7adf:c7b1/64 scope link noprefixroute
valid_lft forever preferred_lft forever
[root@oldboyedu ~]# ip a s eth0 | sed -n '3p'
inet 10.0.0.150/24 brd 10.0.0.255 scope global noprefixroute eth0
[root@oldboyedu ~]# ip a s eth0 | sed -n '3p' |sed -r 's#.*t (.*)/.*#\1#g'
10.0.0.150
[root@oldboyedu ~]# ip a s eth0 |sed -nr '3s#.*t (.*)/.*#\1#gp'
10.0.0.150
[root@oldboyedu ~]# ifconfig eth0 |sed -n '2p'
inet 10.0.0.150 netmask 255.255.255.0 broadcast 10.0.0.255
[root@oldboyedu ~]# ifconfig eth0 |sed -nr '2s#.*t (.*)#\1#gp'
10.0.0.255
[root@oldboyedu ~]# ifconfig eth0 |sed -nr '2s#.*t (.*) n.*#\1#gp'
10.0.0.150
cat>/root/hostname_ip.sh<<"EOF"
#!/usr/bin/sh
source /etc/init.d/functions
if [ $# -ne 2 ];then
echo "/bin/sh $0 hostname PartIP"
exit 1
fi
hostnamectl set-hostname $1
if [ $? -eq 0 ];then
action "hostname update Successful!" /bin/true
else
action "hostname update Failed!" /bin/false
fi
Ip=$(ip a s eth0 |awk -F '[./]' 'NR==3{print $4}')
sed -i "s#$Ip#$2#g" /etc/sysconfig/network-scripts/ifcfg-eth[01]
if [ $? -eq 0 ];then
action "IP update Successful!" /bin/true
else
action "IP update Failed!" /bin/false
fi
systemctl restart network
bash
EOF
3. awk 去列,统计,计算。
选项:
! | 取反 ’!/ /' |
---|---|
NR | 取行'{print $0,NR}' |
$ | 取列 '{print ,NR}' |
d | 删除 '/ /d' |
$NF | 最后一列 |
$0 | 整行内容 |
显示内容 | |
! | 取反 |
-F FS | 输入分隔符,默认是空格 |
-v | 配合输出分隔符使用 |
OFS | 输出分隔符 |
BEGIN END | 数组使用 |
column-t | 对齐 |
$ | 完整内容 |
i++ | 计算次数 |
i=i+$N | 计算和 |
取行
[root@oldboy ~]# awk 'NR==3' sed.txt
103,$Alex,COO
[root@oldboy ~]# awk 'NR==1,NR==3' sed.txt
101,$jinke,CEO
102,$zhangyao,CTO
103,$Alex,COO
[root@oldboy ~]# awk 'NR==1;NR==3' sed.txt
101,$jinke,CEO
103,$Alex,COO
[root@oldboy ~]# awk 'NR>1 && NR<3' sed.txt
102,$zhangyao,CTO
[root@oldboy ~]# awk 'NR>=1 && NR<=3' sed.txt
101,$jinke,CEO
102,$zhangyao,CTO
103,$Alex,COO
过滤
#过滤
[root@oldboy ~]# awk '/jinke/' sed.txt
101,$jinke,CEO
[root@oldboy ~]# awk '!/jinke/' sed.txt
102,$zhangyao,CTO
103,$Alex,COO
104,$yy,CFO
105,$feixue,CIO
[root@oldboy ~]# awk '/jinke|yy/' sed.txt
101,$jinke,CEO
104,$yy,CFO
[root@oldboy ~]# awk '/jinke/;/yy/' sed.txt
101,$jinke,CEO
104,$yy,CFO
[root@oldboy ~]# awk '/jinke/,/yy/' sed.txt
101,$jinke,CEO
102,$zhangyao,CTO
103,$Alex,COO
104,$yy,CFO
取列
#取列
#环境准备
cat >>reg.txt<<EOF
Zhang Dandan 41117397 :250:100:175
Zhang Xiaoyu 390320151 :155:90:201
Meng Feixue 80042789 :250:60:50
Wu Waiwai 70271111 :250:80:75
Liu Bingbing 41117483 :250:100:175
Wang Xiaoai 3515064655 :50:95:135
Zi Gege 1986787350 :250:168:200
Li Youjiu 918391635 :175:75:300
Lao Nanhai 918391635 :250:100:175
EOF
#根据列进行匹配
#第三列以3开头的行
[root@oldboy ~]# awk '$3~/^3/' reg.txt
Zhang Xiaoyu 390320151 :155:90:201
Wang Xiaoai 3515064655 :50:95:135
#取反
[root@oldboy ~]# awk '$3!~/^3/' reg.txt
Zhang Dandan 41117397 :250:100:175
Meng Feixue 80042789 :250:60:50
Wu Waiwai 70271111 :250:80:75
Liu Bingbing 41117483 :250:100:175
Zi Gege 1986787350 :250:168:200
Li Youjiu 918391635 :175:75:300
Lao Nanhai 918391635 :250:100:175
#第三列以1或5为结尾的行
[root@oldboy ~]# awk '$3~/[15]$/' reg.txt
Zhang Xiaoyu 390320151 :155:90:201
Wu Waiwai 70271111 :250:80:75
Wang Xiaoai 3515064655 :50:95:135
Li Youjiu 918391635 :175:75:300
Lao Nanhai 918391635 :250:100:175
#显示姓zhang的人第二次的捐款金额
[root@oldboy ~]# awk -F '[ :]' '/^Zhang/{print $1,$2,$6}' reg.txt
Zhang Dandan 100
Zhang Xiaoyu 90
数组
显示Xiaoyu的捐款.每个值时都有以$开头.如$520$200$135
[root@oldboy ~]# awk '/Xiaoyu/{print $4}' reg.txt |tr ':' '$'
$155$90$201
[root@oldboy ~]# awk '/Xiaoyu/{print $4}' reg.txt |sed 's#:#$#g'
$155$90$201
[root@oldboy ~]# awk '/Xiaoyu/{print $4}' reg.txt |sed 's#:#\$#g'
$155$90$201
[root@oldboy ~]# awk -F '[ :]' '/Xiaoyu/{print "$"$5"$"$6"$"$7}' reg.txt
$155$90$201
[root@oldboy ~]# awk -F '[ :]' -vOFS='$' '/Xiaoyu/{print "$"$5,$6,$7}' reg.txt
$155$90$201
显示所有人的全名,以姓,名的格式显示,如Meng,Feixue
[root@oldboy ~]# awk '{print $1","$2}' reg.txt
Zhang,Dandan
Zhang,Xiaoyu
Meng,Feixue
Wu,Waiwai
Liu,Bingbing
Wang,Xiaoai
Zi,Gege
Li,Youjiu
Lao,Nanhai
[root@oldboy ~]# awk -vOFS=',' '{print $1,$2}' reg.txt
Zhang,Dandan
Zhang,Xiaoyu
Meng,Feixue
Wu,Waiwai
Liu,Bingbing
Wang,Xiaoai
Zi,Gege
Li,Youjiu
Lao,Nanhai
[root@oldboy ~]# awk '{print $1,$2}' reg.txt |tr ' ' ','
Zhang,Dandan
Zhang,Xiaoyu
Meng,Feixue
Wu,Waiwai
Liu,Bingbing
Wang,Xiaoai
Zi,Gege
Li,Youjiu
Lao,Nanhai
#取ip地址
[root@oldboy ~]# ifconfig eth0
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 10.0.0.150 netmask 255.255.255.0 broadcast 10.0.0.255
inet6 fe80::80b2:dc89:7adf:c7b1 prefixlen 64 scopeid 0x20<link>
ether 00:0c:29:1d:ca:3a txqueuelen 1000 (Ethernet)
RX packets 25397 bytes 2315305 (2.2 MiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 19057 bytes 2801352 (2.6 MiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
[root@oldboy ~]# ifconfig eth0 |awk 'NR==2{print $2}'
10.0.0.150
[root@oldboy ~]# ip a s eth0
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 00:0c:29:1d:ca:3a brd ff:ff:ff:ff:ff:ff
inet 10.0.0.150/24 brd 10.0.0.255 scope global noprefixroute eth0
valid_lft forever preferred_lft forever
inet6 fe80::80b2:dc89:7adf:c7b1/64 scope link noprefixroute
valid_lft forever preferred_lft forever
[root@oldboy ~]# ip a s eth0 |awk -F '[ /]*' 'NR==3{print $3}'
10.0.0.150
#排除空行
[root@oldboy ~]# awk '!/^[ \t]*$/' file1
lhlgsd
fdssgdgs
gsdgd
[root@oldboy ~]# awk '!/^\s*$/' file1
lhlgsd
fdssgdgs
gsdgd
[root@oldboy ~]# awk '/^r/' passwd
root:x:0:0:root:/root:/bin/bash
redis:x:997:995:Redis Database Server:/var/lib/redis:/sbin/nologin
rpc:x:32:32:Rpcbind Daemon:/var/lib/rpcbind:/sbin/nologin
rpcuser:x:29:29:RPC Service User:/var/lib/nfs:/sbin/nologin
roott
[root@oldboy ~]# awk '/h$/' passwd
root:x:0:0:root:/root:/bin/bash
#计算
[root@oldboy ~]# cat test.log
10 20
[root@oldboy ~]# awk '{print $2/$1}' test.log
2
[root@oldboy ~]# awk '{print $2+$1}' test.log
30
[root@oldboy ~]# awk '{print $2-$1}' test.log
10
[root@oldboy ~]# awk '{print $2*$1}' test.log
200
[root@oldboy ~]# awk '{print $2^$1}' test.log
10240000000000
[root@oldboy ~]# awk 'BEGIN{print 10-10 }'
0
[root@oldboy ~]# awk 'BEGIN{print 10+10 }'
20
[root@oldboy ~]# awk 'BEGIN{print 10/10 }'
1
[root@oldboy ~]# awk 'BEGIN{print 10*10 }'
100
[root@oldboy ~]# awk 'BEGIN{print 10^10 }'
10000000000
#计算内存可用的百分比
[root@oldboy ~]# free -m
total used free shared buff/cache available
Mem: 1980 148 1526 9 305 1646
Swap: 2047 0 2047
[root@oldboy ~]# free -m |awk '/^Mem/'
Mem: 1980 148 1526 9 305 1646
[root@oldboy ~]# free -m |awk '/^Mem/{print $4/$2}'
0.770707
[root@oldboy ~]# free -m |awk '/^Mem/{print $4/$2*100}'
77.0707
[root@oldboy ~]# free -m |awk '/^Mem/{print $4/$2*100"%"}'
77.0707%