文件的高级命令-文件处理三剑客

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

\'\'\'
三剑客命令都支持管道
\'\'\'

以上是关于文件的高级命令-文件处理三剑客的主要内容,如果未能解决你的问题,请参考以下文章

文本处理三剑客之 Sed ——高级编辑命令

文本处理三剑客之-sed高级用法

Linux运维文本处理三剑客之sed命令

Linux三剑客之grep命令详解

文本三剑客之sed用法详解

linux文本处理三剑客之sed,原来只需要掌握这些!!!