zoukankan      html  css  js  c++  java
  • Linux-文本处理

    Linux-文本处理

    文本处理

    cut

    截取文本内容(只好取规则的文本)

    -d 指定字段分隔符,默认是空格

    -f 指定要显示的字段

    [root@localhost ~]# cp /etc/passwd .
    [root@localhost ~]# cut -d: -f1,3 passwd |head -3		// 只取第一列和第三列
    root:0
    bin:1
    daemon:2
    [root@localhost ~]# cut -d: -f1-3 passwd |head -3		// 只取第一到三列
    root:x:0
    bin:x:1
    daemon:x:2
    

    awk 基于列的文本报告工具

    -F 分隔符

    [root@localhost ~]# awk -F: '{print $1,$3}' passwd |head -3	  //","表示空格
    root 0
    bin 1
    daemon 2
    [root@localhost ~]# awk -F: '{print $1":"$3}' passwd |head -3
    root:0
    bin:1
    daemon:2
    [root@localhost ~]# df -h|awk '{print $4}'|head -3			// 表示取第4列的内容
    Avail
    1.9G
    1.9G
    [root@localhost ~]# df -h|awk '{print $NF}'|head -3			// $NF表示最后一列
    on
    /dev
    /dev/shm3
    [root@localhost ~]# df -h|awk '{print $(NF-1)}'|head -3		// $(NF-1)表示倒数第二列
    Mounted
    0%
    0%
    [root@localhost ~]# df -h|awk 'NR==2{print $4}'				// NR表示行
    1.9G														// 表示取第二行第四列的内容
    

    sed

    基于行的过滤和转换文本的流编辑器

    默认只展示效果并不更改文件

    [root@localhost ~]# sed 's/123/456/g' yqh		// g表示更改所有匹配的内容
    xx:456:456
    [root@localhost ~]# cat yqh
    xx:123:123
    

    -i 确认更改文件

    [root@localhost ~]# sed -i 's/123/456/g' yqh	
    [root@localhost ~]# cat yqh
    xx:456:456
    

    g可以为任意数,指定更改第任意个值

    [root@localhost ~]# sed 's/123/456/1' yqh	
    [root@localhost ~]# cat yqh
    xx:445566:112233
    

    添加内容

    [root@localhost ~]# sed -i '1aLinux' yqh		// 1a表示在第一行后面添加
    [root@localhost ~]# cat yqh
    xx:123:123
    Linux
    [root@localhost ~]# sed '/^xx/aStudy' yqh		// ^xx表示定位到某一行
    xx:123:123
    Study
    Linux
    

    插入内容

    [root@localhost ~]# sed '1iOne' yqh			// 1i表示在第一行插入
    One
    xx:123:123
    Linux
    

    更改内容

    [root@localhost ~]# sed '1iOne' yqh			// 1c表示更改第一行内容
    One
    Linux
    

    删除内容

    [root@localhost ~]# sed '1d' yqh			// 1d表示删除第一行内容
    Linux
    

    打印内容

    [root@localhost ~]# sed -n '1p' yqh			// 1p表示打印第一行内容
    xx:112233:112233							// -n表示关闭默认打印全局功能
    

    cat

    拼接文件内容并输出至标准输出

    //用cat创建文件
    [root@localhost ~]# cat > abc <<EOF			// EOF表示开始和结束的标志 需要相对应
    > 1 3 5
    > 4 3 2
    > 2 7 9
    > 10 11 23
    > 1 3 5
    > 4 3 2
    > EOF
    

    文本排序

    sort

    默认是升序排序,不按数值大小排序,分隔符默认是空格

    将文件的每一行作为一个单位相互比较,比较原则是从首字符向后,依次按ASCII码值进行比较,最后将他们按升序输出

    [root@localhost ~]# cat abc
    1 3 5
    4 3 2
    2 7 9
    10 11 23
    1 3 5
    4 3 2
    [root@localhost ~]# sort abc
    10 11 23
    1 3 5
    1 3 5
    2 7 9
    4 3 2
    4 3 2
    

    按数值大小排序

    [root@localhost ~]# sort -n abc				// -n表示按数值从小到大排序
    1 3 5
    1 3 5
    2 7 9
    4 3 2
    4 3 2
    10 11 23
    [root@localhost ~]# sort -nr abc			// -nr表示按数值从大到小排序
    10 11 23
    4 3 2
    4 3 2
    2 7 9
    1 3 5
    1 3 5
    

    指定列排序

    [root@localhost ~]# sort -nk2 abc			// -nk2表示按第二列数值从小到大排序
    1 3 5
    1 3 5
    4 3 2
    4 3 2
    2 7 9
    10 11 23
    

    去重,排序后相同的行只显示一次

    [root@localhost ~]# sort -nu abc		   // -u表示去重 -nu表示数值从大到小排序并去重
    1 3 5
    2 7 9
    4 3 2
    10 11 23
    

    当文件不规律时,指定分隔符定位排序

    [root@localhost ~]# cat bcd
    zhangsan:x:5:4:zhangsan:/root
    lisi:x:1:2:lisi:/root
    wangwu:x:0:1:wangwu:/root
    xiaoming:x:9:8:xiaoming:/root
    xiaohong:x:6:6:xiaohong:/root
    [root@localhost ~]# sort -n -t: -k3 bcd			// -n -t: -k3表示以“:”为分隔符定位
    wangwu:x:0:1:wangwu:/root						// 并按第三列数值从小到大排序
    lisi:x:1:2:lisi:/root
    zhangsan:x:5:4:zhangsan:/root
    xiaohong:x:6:6:xiaohong:/root
    xiaoming:x:9:8:xiaoming:/root
    

    uniq

    统计连续出现重复的行 (需要先排序再使用)

    显示文件中行重复的次数

    [root@localhost ~]# sort -n abc|uniq -c			// -c表示统计重复的次数
          2 1 3 5									// 第一列数值表示重复的次数
          1 2 7 9
          2 4 3 2
          1 10 11 23
    

    只显示重复的行

    [root@localhost ~]# sort -n abc|uniq -d			// -d表示只显示重复的行
    1 3 5
    4 3 2
    

    wc (word count)

    统计单词

    [root@localhost ~]# cat abc
    1 3 5
    4 3 2
    2 7 9
    10 11 23
    1 3 5
    4 3 2
    [root@localhost ~]# wc abc
     6 18 39 abc
    [root@localhost ~]# cat abc|wc -l			// -l表示只显示行数
    6
    [root@localhost ~]# cat abc|wc -w			// -w表示只显示单词数
    18
    [root@localhost ~]# cat abc|wc -c			// -c表示只显示字节数
    39
    

    大小统计

    du

    查看文件或目录占用的磁盘空间大小

    [root@localhost ~]# du abc
    4	abc
    

    生成一个1G名叫test文件

    [root@localhost ~]# dd if=/dev/zero of=test bs=1024M count=1	
    1+0 records in						///dev/zero是吐零设备
    1+0 records out						///dev/null是黑洞设备
    1073741824 bytes (1.1 GB, 1.0 GiB) copied, 41.3415 s, 26.0 MB/s
    [root@localhost ~]# du test
    1048576	test
    

    以人类友好的方式显示大小

    [root@localhost ~]# du -h test				// -h是human-readable可读的
    1.0G	test
    

    显示总的占用空间大小

    [root@localhost ~]# du -s /root
    1048616	/root
    

    组合

    [root@localhost ~]# du -sh test /root
    1.0G	test
    40K		/root
    

    df

    报告文件系统磁盘空间使用情况

    [root@localhost ~]# df
    Filesystem            1K-blocks    Used Available Use% Mounted on
    devtmpfs                1903220       0   1903220   0% /dev
    tmpfs                   1921028       0   1921028   0% /dev/shm
    tmpfs                   1921028    9072   1911956   1% /run
    tmpfs                   1921028       0   1921028   0% /sys/fs/cgroup
    /dev/mapper/rhel-root  52403200 2733960  49669240   6% /
    /dev/mapper/rhel-home  47212008  362212  46849796   1% /home
    /dev/sda1               1038336  182860    855476  18% /boot
    tmpfs                    384204       0    384204   0% /run/user/0
    

    主机名管理

    hostname

    查看或临时修改主机名,重开终端有效,重启失效

    目录在/etc/hostname,实际是修改这个

    [root@localhost ~]# hostname
    localhost.localdomain
    [root@localhost ~]# hostname yqh
    [root@localhost ~]# bash
    [root@yqh ~]# reboot
    [root@localhost ~]#
    

    hostname

    查看或永久修改主机名,重开终端生效,重启依然有效

    [root@localhost ~]# hostnamectl set-hostname yqh
    [root@localhost ~]# bash
    [root@yqh ~]# reboot
    [root@yqh ~]#
    

    其他

    time

    显示命令的执行时间

    [root@yqh ~]# time cat /etc/hostname
    yqh
    
    real	0m0.001s								//真正执行的时间
    user	0m0.000s
    sys		0m0.001s
    

    clear

    清屏(快捷键:Ctrl+L)

    [root@yqh ~]# clear
    

    ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓

    [root@yqh ~]# 
    

    whoami

    显示当前登录用户

    w

    显示当前在线用户并显示其在运行的命令

    who

    查看当前在线用户

    [root@yqh ~]# whoami
    root
    [root@yqh ~]# w
     16:52:46 up  5:31,  4 users,  load average: 0.00, 0.00, 0.00
    USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
    root     tty1     -                Tue14   28:28   0.18s  0.18s -bash
    root     pts/0    192.168.21.1     16:24    0.00s  0.03s  0.00s w
    root     pts/1    192.168.21.1     16:49   14.00s  0.02s  0.01s vi abc
    root     pts/2    192.168.21.1     16:49    3.00s  0.00s  0.00s vi yqh
    [root@yqh ~]# who
    root     tty1         2020-11-03 14:37
    root     pts/0        2020-11-05 16:24 (192.168.21.1)
    root     pts/1        2020-11-05 16:49 (192.168.21.1)
    root     pts/2        2020-11-05 16:49 (192.168.21.1)
    

    which

    显示指定命令的绝对路径

    [root@yqh ~]# which ls
    alias ls='ls --color=auto'
    	/usr/bin/ls
    

    date

    显示或设置日期与时间,不带参数的date用于显示当前系统日期与时间

    [root@yqh ~]# date
    Thu Nov  5 16:54:29 CST 2020
    [root@yqh ~]# date -s '2020-11-5 17:20:00'				// -s以字符串方式设置时间
    Thu Nov  5 17:20:00 CST 2020
    [root@yqh ~]# date '+%Y'								// 年
    2020
    [root@yqh ~]# date '+%m'								// 月
    11
    [root@yqh ~]# date '+%d'								// 日
    05
    [root@yqh ~]# date '+%H'								// 时
    16
    [root@yqh ~]# date '+%M'								// 分
    57
    [root@yqh ~]# date '+%S'								// 秒
    38
    

    创建以当前日期为命名的文件

    [root@yqh ~]# mkdir $(date '+%Y%m%d')
    [root@yqh ~]# ls
    20201105  abc  anaconda-ks.cfg  bcd  passwd  test
    [root@yqh ~]# mkdir abc-$(date '+%H%M%S')
    [root@yqh ~]# ls
    20201105  abc  abc-170012  anaconda-ks.cfg  bcd  passwd  test
    

    cal 打印日历

    [root@yqh ~]# cal
        November 2020   
    Su Mo Tu We Th Fr Sa
     1  2  3  4  5  6  7
     8  9 10 11 12 13 14
    15 16 17 18 19 20 21
    22 23 24 25 26 27 28
    29 30               
                        
    [root@yqh ~]# cal 9999							//打印9999年的日历
                                   9999                               
    
           January               February                 March       
    Su Mo Tu We Th Fr Sa   Su Mo Tu We Th Fr Sa   Su Mo Tu We Th Fr Sa
                    1  2       1  2  3  4  5  6       1  2  3  4  5  6
     3  4  5  6  7  8  9    7  8  9 10 11 12 13    7  8  9 10 11 12 13
    10 11 12 13 14 15 16   14 15 16 17 18 19 20   14 15 16 17 18 19 20
    17 18 19 20 21 22 23   21 22 23 24 25 26 27   21 22 23 24 25 26 27
    24 25 26 27 28 29 30   28                     28 29 30 31         
    31                                                                
            April                   May                   June        
    Su Mo Tu We Th Fr Sa   Su Mo Tu We Th Fr Sa   Su Mo Tu We Th Fr Sa
                 1  2  3                      1          1  2  3  4  5
     4  5  6  7  8  9 10    2  3  4  5  6  7  8    6  7  8  9 10 11 12
    11 12 13 14 15 16 17    9 10 11 12 13 14 15   13 14 15 16 17 18 19
    18 19 20 21 22 23 24   16 17 18 19 20 21 22   20 21 22 23 24 25 26
    25 26 27 28 29 30      23 24 25 26 27 28 29   27 28 29 30         
                           30 31                                      
            July                  August                September     
    Su Mo Tu We Th Fr Sa   Su Mo Tu We Th Fr Sa   Su Mo Tu We Th Fr Sa
                 1  2  3    1  2  3  4  5  6  7             1  2  3  4
     4  5  6  7  8  9 10    8  9 10 11 12 13 14    5  6  7  8  9 10 11
    11 12 13 14 15 16 17   15 16 17 18 19 20 21   12 13 14 15 16 17 18
    18 19 20 21 22 23 24   22 23 24 25 26 27 28   19 20 21 22 23 24 25
    25 26 27 28 29 30 31   29 30 31               26 27 28 29 30      
                                                                      
           October               November               December      
    Su Mo Tu We Th Fr Sa   Su Mo Tu We Th Fr Sa   Su Mo Tu We Th Fr Sa
                    1  2       1  2  3  4  5  6             1  2  3  4
     3  4  5  6  7  8  9    7  8  9 10 11 12 13    5  6  7  8  9 10 11
    10 11 12 13 14 15 16   14 15 16 17 18 19 20   12 13 14 15 16 17 18
    17 18 19 20 21 22 23   21 22 23 24 25 26 27   19 20 21 22 23 24 25
    24 25 26 27 28 29 30   28 29 30               26 27 28 29 30 31   
    31                                                                
    

    bc 数学运算时保留小数

    安装bc

    [root@yqh ~]# mount /dev/cdrom /mnt
    mount: /mnt: WARNING: device write-protected, mounted read-only.
    [root@yqh ~]# rpm -ivh /mnt/BaseOS/Packages/bc-1.07.1-5.el8.x86_64.rpm 
    warning: /mnt/BaseOS/Packages/bc-1.07.1-5.el8.x86_64.rpm: Header V3 RSA/SHA256 Signature, key ID fd431d51: NOKEY
    Verifying...                          ################################# [100%]
    Preparing...                          ################################# [100%]
    Updating / installing...
       1:bc-1.07.1-5.el8                  ################################# [100%]
    [root@yqh ~]# which bc
    /usr/bin/bc
    

    保留小数后几位

    [root@yqh ~]# echo 'scale=2;5/2'|bc	-l				// 计算5除以2保留2位小数
    2.50
    [root@yqh ~]# echo 'scale=5;2/5'|bc -l				// 计算2除以5保留5位小数
    .40000
    

    ldd

    查看指定程序有哪些依赖库文件

    [root@yqh ~]# ldd /usr/bin/ls
    	linux-vdso.so.1 (0x00007fff3af6b000)
    	libselinux.so.1 => /lib64/libselinux.so.1 (0x00007fd086bbe000)
    	libcap.so.2 => /lib64/libcap.so.2 (0x00007fd0869b8000)
    	libc.so.6 => /lib64/libc.so.6 (0x00007fd0865f6000)
    	libpcre2-8.so.0 => /lib64/libpcre2-8.so.0 (0x00007fd086372000)
    	libdl.so.2 => /lib64/libdl.so.2 (0x00007fd08616e000)
    	/lib64/ld-linux-x86-64.so.2 (0x00007fd08700c000)
    	libpthread.so.0 => /lib64/libpthread.so.0 (0x00007fd085f4e000)
    

    移走依赖库文件

    [root@yqh ~]# mv /lib64/libselinux.so.1  /opt
    [root@yqh ~]# ls
    ls: error while loading shared libraries: libselinux.so.1: cannot open shared object file: No such file or directory						// 移走后无法使用ls命令
    [root@yqh ~]# mv /opt/libselinux.so.1 /lib64/
    mv: error while loading shared libraries: libselinux.so.1: cannot open shared object file: No such file or directory						// mv命令也用不了
    [root@yqh ~]# ldd /usr/bin/ls
    	linux-vdso.so.1 (0x00007ffd3c51b000)
    	libselinux.so.1 => not found
    	libcap.so.2 => /lib64/libcap.so.2 (0x00007fef86f25000)
    	libc.so.6 => /lib64/libc.so.6 (0x00007fef86b63000)
    	/lib64/ld-linux-x86-64.so.2 (0x00007fef8734e000)
    

    软链接

    [root@yqh ~]# ln /opt/libselinux.so.1  /lib64/
    [root@yqh ~]# ls
    20201105  abc  abc-170012  anaconda-ks.cfg  bcd  passwd  test
    
  • 相关阅读:
    PatentTips
    PatentTips
    PatentTips
    Xvisor ARM32 启动分析
    PatentTips
    PatentTips
    PatentTips
    PatentTips
    PatentTips
    PatentTips
  • 原文地址:https://www.cnblogs.com/yuqinghao/p/13993945.html
Copyright © 2011-2022 走看看