• linux文本排序统计、快捷键和通配符及引号


    一、文本排序、统计类命令

    1.wc命令用于统计指定文本文件的行数、字数或字节数。

    (1)格式:“wc [参数] 文件名称”

    (2)wc:  行数   单词数   字节数

    常用选项

    参数作用
    -l

    只显示行数

    -w只显示单词数
    -c只显示字节数

    (3)例1:查看系统中装了多少个软件

    1. [root@server ~]# rpm -qa | wc -l
    2. 1322

    2.sort命令用于对文本内容进行再排序

    (1)格式:“sort [参数] 文件名称”

    (2)常用选项:

    参数作用
    -f忽略大小写
    -b忽略缩进空格
    -n以数值型排序
    -r反向排序
    -u去除重复行
    -t指定文件间隔符
    -k设定字段范围,按哪一列排序

    (3)示例:

    例1:按英文字母排序

    1. [root@server ~]# cat s1.txt
    2. afasg
    3. fvsgeswg
    4. sgbsrgr
    5. sgsrgf
    6. xbf
    7. egtbf
    8. cdgza
    9. lkegpe
    10. [root@server ~]# sort s1.txt
    11. afasg
    12. cdgza
    13. egtbf
    14. fvsgeswg
    15. lkegpe
    16. sgbsrgr
    17. sgsrgf
    18. xbf

    例2:按照年龄进行排序

    1. [root@server ~]# sort -t" " -k2 -n s1.txt
    2. afasg 12
    3. sgbsrgr 13
    4. sgsrgf 14
    5. fvsgeswg 24
    6. egtbf 64
    7. cdgza 67
    8. lkegpe 114
    9. xbf 345

    例3:将年龄进行降序排序

    1. [root@server ~]# sort -t" " -k2 -nr s1.txt
    2. xbf 345
    3. lkegpe 114
    4. cdgza 67
    5. egtbf 64
    6. fvsgeswg 24
    7. sgsrgf 14
    8. sgbsrgr 13
    9. afasg 12

    例4:去除文件中的重复行

    1. shanghai
    2. xian
    3. chengdu
    4. suzhou
    5. jiangsu
    6. xian
    7. chengdu
    8. suzhou
    9. [root@server ~]# sort -u s1.txt
    10. chengdu
    11. jiangsu
    12. shanghai
    13. suzhou
    14. xian

    3.cut命令用于按列提取文本内容

    (1)格式:“cut [参数] 文件名称”。

    (2)常用选项:

    参数选项
    -d分隔符
    -f输出字段
    -c输出字符个数

    (3)示例:

    例1:输出文件/etc/passwd前十行的用户名

    1. [root@server ~]# cut -d":" -f1 /etc/passwd | head
    2. root
    3. bin
    4. daemon
    5. adm
    6. lp
    7. sync
    8. shutdown
    9. halt
    10. mail
    11. operator

    例2:输出文件/etc/passwd前十行里面的用户名,uid,gid

    1. [root@server ~]# cut -d":" -f1,3-4 /etc/passwd | head---不连续字段用逗号(,)隔开、连续字段用(-)连接
    2. root:0:0
    3. bin:1:1
    4. daemon:2:2
    5. adm:3:4
    6. lp:4:7
    7. sync:5:0
    8. shutdown:6:0
    9. halt:7:0
    10. mail:8:12
    11. operator:11:0

    例3:输出文件/etc/passwd前十行的前八个字符

    1. [root@server ~]# cut -c 1-8 /etc/passwd | head
    2. root:x:0
    3. bin:x:1:
    4. daemon:x
    5. adm:x:3:
    6. lp:x:4:7
    7. sync:x:5
    8. shutdown
    9. halt:x:7
    10. mail:x:8
    11. operator

    4.uniq命令用于去除文本中连续的重复行

    (1)格式:“uniq [参数] 文件名称”

    -c  统计文件中相同的行

    (2)示例:

    面试题:统计/etc/passwd文件中的shell类型

    1. [root@server ~]# cut -d: -f7 /etc/passwd | sort ---让相同的东西连在一起
    2. [root@server ~]# cut -d":" -f7 /etc/passwd | sort | uniq -c | sort -nr
    3. 40 /sbin/nologin
    4. 7 /bin/bash
    5. 1 /sbin/shutdown
    6. 1 /sbin/halt
    7. 1 /bin/sync

    5.tr 命令用于转换或删除文件中的字符

    (1)语法:

    tr [-cdst][--help][--version][第一字符集][第二字符集]
    tr [OPTION]…SET1[SET2]

    (2)常用命令:

    [:alnum:]       all letters and digits ---数字和大小写字母
    [:alpha:]        all letters ---大小写字母
    [:digit:]          all digits ---数字[0-9]
    [:lower:]        all lower case letters ---小写字母[a-z]
    [:space:]       all horizontal or vertical whitespace
    [:upper:]       all upper case letters ---大写字母[A-Z]

    例:小写转大写

    1. [root@server ~]# echo "Welcome to the Linux" | tr 'a-z' 'A-Z'---小写转大写
    2. [root@server ~]# echo "Welcome to the Linux" | tr [[:lower:]] [[:upper:]]
    3. WELCOME TO THE LINUX

    (3)参数说明

    • -c, --complement:反选设定字符。也就是符合 SET1 的部份不做处理,不符合的剩余部份才进行 转换
    • -d, --delete:删除指令字符
    • -s, --squeeze-repeats:缩减连续重复的字符成指定的单个字符
    • -t, --truncate-set1:削减 SET1 指定范围,使之与 SET2 设定长度相等
    • --help:显示程序用法信息 --version:显示程序本身的版本信息

    二、快捷键的使用

    1.history查阅命令历史记录

    (1)执行方式:利用向上或向下光标键来进行查询;第二种办法是执行“history [n]” 命令来查询。

    (2)history(选项)(参数)

    选项:

    -N: 显示历史记录中最近的N个记录;

    -c:清空当前历史命令;

    -a:将历史命令缓冲区中命令写入历史命令文件中;

    -r:将历史命令文件中的命令读入当前历史命令缓冲区;

    -w:将当前历史命令缓冲区命令写入历史命令文件中;

    -d:删除历史记录中第offset个命令

    -n:读取指定文件

    参数:

    n:打印最近的n条历史命令。

    (3)history的使用

    1> 默认显示1000条命令。

    [root@server ~]# vim /etc/profile—HISTSIZE=1000

    2> 面试题:改变history默认输出(包含用户、ip、时间等)

    法1:/etc/profile文件中加入以下内容

    1. HISTTIMEFORMAT=”%F %T `whoami` ”
    2. USER_IP=`who -u am I 2> /dev/null | awk ‘{print $NF}’ | sed -e ‘s/[()] //g`
    3. export HISTTIMEFORMAT=” [%F %T] [`whoami`][${USER_IP}] ”
    4. 或者不添加第一行,直接添加后两行:
    5. USER_IP=`who -u am i 2>/dev/null| awk '{print $NF}'|sed -e 's/[()]//g'`
    6. export HISTTIMEFORMAT="[%F %T][`whoami`][${USER_IP}] "

    法2:执行:source /etc/passwd

    效果:

    1. [root@server ~]# history
    2. 1 [2020-12-25 18:10:27][root][111.18.44.17]
    3. 2 [2020-12-20 10:35:16][root][111.18.44.17] cat /etc/redhat-release
    4. 3 [2020-12-20 14:02:20][root][111.18.44.17] exit
    5. 4 [2020-12-24 09:39:17][root][111.18.44.17] cat /etc/redhat-release
    6. 5 [2020-12-24 10:06:17][root][111.18.44.17] awk 'NR==5' /etc/passwd
    7. 6 [2020-12-24 10:08:31][root][111.18.44.17] whereis ifconfig

    2.断行符“\”

    对于符号比较多的长命令,尽管系统在到达行尾时会自动将长命令行换到下一行,但也可以使用反斜杠“\”再加回车,将一个较长的命令分成多行表达。增强命令的可读性,换行后系统自动显示提示符“>”,表示正在输入一个长命令,此时可继续在新行上输入命令的后续部分。

    例:

    1. [root@server ~]# ls /etc/sysconfig/network-scripts/ \
    2. > /tmp

    3.一行输入多个命令“;”

    若要在一行上输入和执行多条较短的命令,可使用分号来分隔命令。

    例:

    [root@server ~]# date; ls /tmp ;history 
    

    4.快捷方式

    Ctrl+a 移动到当前行的开头

    Ctrl+e 移动到当前行的结尾

    Ctrl+l 清屏 Ctrl+u 剪切命令行中光标所在处之前的所有字符(不包括自身)

    Ctrl+k 剪切命令行中光标所在处之后的所有字符(包括自身)

    Ctrl+R 可以使用该快捷键来搜索历史命令

    引用上一条命令的最后一个参数

    方法1:!$

    方法2:Alt+.(可能与快捷键冲突)

    方法3:Esc,.

    Alt+. 无法使用的解决方法:

    三、通配符

    1.含义:通配符是一种特殊语句,主要有星号(*)、问号(?)等表示,用来模糊搜索文件,当查找目录或文件时, 可以使用通配符来代替一个或多个真正字符。

    2.作用范围:目录和文件名

    3.常见通配符:常用通配符包括 "*"、"?" 、"[ ]"、 "[^ ]" 、"[! ]"和"{}"

    4.常用选项

    字符含义
    *匹符配任意字
    匹配单个字符
    []匹配方括号中的任意一个,不能用于创建目录和文件
    [^]匹配方括号中的任意一个字符或数字后进行取反,等同于[! ],表示范围可以 用".."或"—”,用于查找和删除目录和文件,不用于创建目录和文件
    [!]匹配方括号中的任意一个字符或数字后进行取反, 等同于[^ ],表示范围可以 用".."或"—", 用于查找和删除目录和文件,不用于创建目录和文件
    [?-?]匹配方括号范围内任意一个,用于查询、删除,但不能用于创建目录和文件
    {string,string}匹配括号中的任意一个字符串,表示一个范围时,字符串之间的个数用".."

    示例:

    1. [root@server ~]# touch f.txt f{1..6}.txt f{11..16}.txt f{111..116}.txt
    2. [root@server ~]# ls f*.txt
    3. f111.txt f114.txt f11.txt f14.txt f1.txt f4.txt f.txt
    4. f112.txt f115.txt f12.txt f15.txt f2.txt f5.txt
    5. f113.txt f116.txt f13.txt f16.txt f3.txt f6.txt
    6. [root@server ~]# ls f?.txt
    7. f1.txt f2.txt f3.txt f4.txt f5.txt f6.txt
    8. [root@server ~]# ls f??.txt
    9. f11.txt f12.txt f13.txt f14.txt f15.txt f16.txt
    10. [root@server ~]# ls f???.txt
    11. f111.txt f112.txt f113.txt f114.txt f115.txt f116.txt
    12. [root@server ~]# ls f[135].txt
    13. f1.txt f3.txt f5.txt
    14. [root@server ~]# ls f[^135].txt
    15. f2.txt f4.txt f6.txt
    16. [root@server ~]# ls f[!135].txt
    17. f2.txt f4.txt f6.txt
    18. [root@server ~]# ls f{1,3,5}.txt
    19. f1.txt f3.txt f5.txt
    20. [root@server ~]# ls f{1..6}.txt
    21. f1.txt f2.txt f3.txt f4.txt f5.txt f6.txt

    [135] 匹配1或3或5
    [1-3] 匹配1或2或3
    [^1-3] 匹配非1-3之外的
    [!1-3] 匹配非1-3之外的

    {}
    {1,3,5}匹配1或2或3
    {1..3} 匹配1或2或3

    四、引号

    1.分类:单引号:’’        双引号:””        反引号:``  等价于$()

    2.一般情况下,单引号和双引号引用的字符串

    1. [root@server ~]# echo 'hello world'
    2. hello world
    3. [root@server ~]# echo "hello world"
    4. hello world

    3.单引号和双引号区别:

    (1)单引号:所见所得

    (2)双引号:引用变量值,可以包含命令结果

    1. [root@server ~]# echo "hello $USER"
    2. hello root
    3. [root@server ~]# echo 'hello $USER'
    4. hello $USER

    (3)反引号:执行命令

    1. [root@server ~]# echo 'hello `whoami`'
    2. hello `whoami`
    3. [root@server ~]# echo "hello `whoami`"
    4. hello root

    4.选项及作用

    符号作用
    '单引号,输出时,将单引号内的所有内容都原样输出,称为强引用
    "双引号,输出双引号内的所有内容,如果内容中有变量,特殊转义符等;会首先把变量,转义符解析出结果,然后再输出最终内容,再变成强引用
    `反引号,一般用于引用命令,执行的时候会被执行,与$()作用相同
    $()与 ` 作用相同
  • 相关阅读:
    SQLite常用语句
    go中并发之waitgroup、runtime、sync、time
    2022 全球 AI 模型周报
    CentOS8/RHEL8 root密码破解
    STM32入门笔记(02):SPI 通信之xxx(SPL库函数版)
    JDK8和JDK17共存以及切换
    速盾:cdn与云服务区别有哪些方面?
    LeetCode常见题型——字符串
    Docker轻量级可视化监控工具Portainer的使用
    镭神激光雷达和相机联合标定
  • 原文地址:https://blog.csdn.net/weixin_62443409/article/details/127787371