文件的高级命令-文件处理三剑客
Posted 剧终cur
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了文件的高级命令-文件处理三剑客相关的知识,希望对你有一定的参考价值。
文件的高级命令
昨天的vim的补充
在屏幕中光标快速移动
H: 光标移动到这个屏幕的最上方那一行的第一个字符
M: 光标移动到这个屏幕的中央那一行的第一个字符
L: 光标移动到这个屏幕的最下面一行的第一个字符
查找替换
语法格式: : 行数 s/被替换字符/替换字符/
:1,3 s/egon/Egon/ # 把1到3行的第一个egon替换成Egon
:5,$ s/egon/EGON/g # 把第五行到最后一行的所有egon换成EGON, 后面的g是全局的意思
:% s/egon/EGON/g # %代表全文的意思,把全文的egon替换成EGON
:% s/^#// # 第一个双斜杠里面可以是正则表达式^表示以什么开头,这段代码意思是将全文以#开头的替换成空
读入写入文件
:w /aaa.txt # 另存为根目录下的aaa.txt
:1,3 w /2.txt # 将1到3行另存到根下的2.txt
:r /ect/hosts # 将/ect/hosts的内容读到当前文件
设置环境
:set nu # 设置行号
:set ic # 不区分大小写
:set ai # 自动缩进
:set nonu # 取消设置行号
:set noic # 取消区分大小写
同时编辑多个文件
vim -o /home/qwe/1.txt /ect/hosts
同时编辑这两个文件,按ctrl+w+w 切换,,保存退出需要执行两次,小o是水平分割,大O是垂直分割
vimdiff /home/qwe/1.txt /etc/host
对比文件,按ctrl+w+w 切换,保存退出需要执行两次,不同的内容高亮显示
用echo往文件中添加内容
[root@localhost ~]# echo \'123\' >> /home/qwe/2.txt
[root@localhost ~]# cat /home/qwe/2.txt
123
可视块操作:
按ctrl+v进入即可
在这个页面可以通过方向键选中内容,进行一个增删改查的操作
"""
文件在修改的时候,系统会从硬盘拿出一部分空间来存放你临时修改的文件,以.开头.swp结尾的文件,所以如果文件在没有保存的情况下关闭是不会有事的,是可以找的回来的,但是要是这个临时文件,没了,那就是真的没了。
"""
文件处理命令三剑客之sed
流式编辑器,主要擅长对文件的编辑操作。
语法格式:
sed -选项(一般都是r) \'定位 + 命令\' 文件路径
选项:
-n 取消默认输出
-r 支持扩展正则元字符
-i 立即编辑文件
定位:
行定位: n代表定位到n行; n,m表示从第n行到第m行; 不写代表所有行
正则定位:
/^str/ 以str开头的一行;
/str$/ 以str结尾的一行;
/str/ 包含str的行;
命令:
p: 打印定位的那一行,原本的这一行也会输出。
d: 删除得的这一行。
c: 改变这一行。
s: 替换这一行。
行定位:
[root@localhost ~]# sed -r \'\' /home/qwe/1.txt
111
egon222
33egon3egon3333egon
444 # \'\'不写默认就是全部打印
egon55egon5egon
666
777egon
[root@localhost ~]# sed -r \'2p\' /home/qwe/1.txt
111
egon222
egon222 # 对第二行多打印一次
33egon3egon3333egon
444
egon55egon5egon
666
777egon
[root@localhost ~]# sed -r \'2d\' /home/qwe/1.txt
111
33egon3egon3333egon
444 # 删除第二行
egon55egon5egon
666
777egon
[root@localhost ~]# sed -r \'3c xxxx\' /home/qwe/1.txt
111
egon222
xxxx # 把第三行全部替换成xxxx
444
egon55egon5egon
666
777egon
[root@localhost ~]# sed -r \'5s/egon/EGON/g\' /home/qwe/1.txt
111
egon222
33egon3egon3333egon
444
EGON55EGON5EGON # 把第五行的小写egon全部替换成大写EGON
666
777egon
[root@localhost ~]#
\'\'\'==================================================================================\'\'\'
正则定位:
[root@localhost ~]# sed -r \'\' /home/qwe/1.txt
111
egon222 #
33egon3egon3333egon
444
egon55egon5egon
666
777egon
[root@localhost ~]# sed -r \'/^egon/d\' /home/qwe/1.txt
111
33egon3egon3333egon # 删除以egon开头的所有行
444
666
777egon
[root@localhost ~]# sed -r \'/egon$/c xxxx\' /home/qwe/1.txt
111
egon222
xxxx # 将以egon结束的所有行替换成 xxxx
444
xxxx
666
xxxx
[root@localhost ~]# sed -r \'/egon/s/egon/EGON/g\' /home/qwe/1.txt
111
EGON222
33EGON3EGON3333EGON # 将包含egon的行里面的所有egon替换成EGON
444
EGON55EGON5EGON
666
777EGON
[root@localhost ~]#
# 修改文件内容,在r后面加一个i就可以修改,前提是确定要修改之后在修改
[root@localhost ~]# sed -ri \'/egon/s/egon/EGON/g\' /home/qwe/1.txt
[root@localhost ~]# cat /home/qwe/1.txt
111
EGON222
33EGON3EGON3333EGON
444
EGON55EGON5EGON
666
777EGON
[root@localhost ~]#
ps:
替换后面的g后面可以根一个i,表示大小写不在意
文件处理三剑客之awk
语法格式:
awk -F指定分隔符 \'指定行{print 第几列}\' 文件路径
NR: 记录号
NF: 以-F分割符分割的段数
指定行:
比较运算:
NR >= 3 && NR <=5 表示从第三行到第五行
NR <= 3 || NR >=4 表示小于等于三的行数和大于等于五的行数
正则表达式
/^str/ 以str开头的一行;
/str$/ 以str结尾的一行;
/str/ 包含str的行;
[root@localhost ~]# cat -n /home/qwe/1.txt
1 t:x:0:0:root:/root:/bin/bash
2 bin:x:1:1:bin:/bin:/sbin/nologin
3 daemon:x:2:2:daemon:/sbin:/sbin/nologin
4 adm:x:3:4:adm:/var/adm:/sbin/nologin
5 lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
6 sync:x:5:0:sync:/sbin:/bin/sync
7 shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
8 halt:x:7:0:halt:/sbin:/sbin/halt
9 mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
10 operator:x:11:0:operator:/root:/sbin/nologin
11 games:x:12:100:games:/usr/games:/sbin/nologin
12 ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
[root@localhost ~]# awk -F: \'NR >=3 && NR <=7{print $1,$3}\' /home/qwe/1.txt
daemon 2 # 以:分割,找到行数大于等于3 并且 小于等于7 然后打印出每一行第一列和第三列,中间逗号代 表空格
adm 3
lp 4
sync 5
shutdown 6
[root@localhost ~]# awk -F: \'NR <=2 || NR >= 11{print $1">>>"$NF}\' /home/qwe/1.txt
# 以:分割,找到小于等于2并且大于等于11,然后打印出第一列和最后一列,中间用>>>连接
t>>>/bin/bash
bin>>>/sbin/nologin
games>>>/sbin/nologin
ftp>>>/sbin/nologin
[root@localhost ~]# awk -F: \'/bash$/{print $1,$NF}\' /home/qwe/1.txt
# 找到以bash结尾的一行,然后打印出第一列和最后一列
t /bin/bash
\'\'\'
行数不写,默认所有文本
\'\'\'
文件处理三剑客之grep
语法:
grep 选项 \'正则\' 文件路径
选项:
-n: 再过滤出来的每一行前面加上它在文件中的相对行号
-i: 忽略大小写
-R, -r: 递归
-l: 如果匹配不成功,则只将文件名打印出来,失败则不打印,通常-rl一起用
[root@localhost ~]# grep -n \'root\' /etc/passwd
# 过滤出包含root的行,
1:root:x:0:0:root:/root:/bin/bash
10:operator:x:11:0:operator:/root:/sbin/nologin
[root@localhost ~]# grep -n \'^root\' /etc/passwd
# 过滤出以root开头的行
1:root:x:0:0:root:/root:/bin/bash
[root@localhost ~]# grep -n \'root$\' /etc/passwd
[root@localhost ~]# grep -l \'root$\' /etc/passwd
[root@localhost ~]# grep -n \'bash$\' /etc/passwd
# 过滤以bash结尾的行
1:root:x:0:0:root:/root:/bin/bash
21:lyh:x:1000:1000:lyh:/home/lyh:/bin/bash
27:qwe:x:1001:1001::/home/qwe:/bin/bash
28:asd:x:1002:1002::/home/asd:/bin/bash
[root@localhost ~]#
[root@localhost ~]# grep -rl \'ip\' /boot/grub2/locale/
# 递归过滤,/boot/grub2/locale/这个文件夹下面含有ip的文件名
/boot/grub2/locale/ast.mo
/boot/grub2/locale/ca.mo
/boot/grub2/locale/da.mo
/boot/grub2/locale/de.mo
/boot/grub2/locale/de@hebrew.mo
/boot/grub2/locale/de_CH.mo
.................
[root@localhost ~]#
[root@localhost ~]# ps aux | grep bash
root 1660 0.0 0.3 116732 3208 tty1 Ss+ 14:35 0:00 -bash
root 2300 0.0 0.3 116832 3488 pts/1 Ss 16:00 0:00 -bash
root 2576 0.0 0.0 112824 968 pts/1 R+ 16:49 0:00 grep --color=auto bash
\'\'\'
三剑客命令都支持管道
\'\'\'
以上是关于文件的高级命令-文件处理三剑客的主要内容,如果未能解决你的问题,请参考以下文章