2018-06-01 课堂笔记

目录

  1. cut
  2. sort
  3. wc
  4. uniq
  5. tee
  6. tr
  7. split
  8. 扩展知识

1. cut

数据截取, 以行为单位进行

1.1 用法

echo $PATH | cut -d '' -f

1.2 选项

  • -d 'x': delimiter, 设定用以分隔数据的分隔符, 与-f一起使用
  • -f #:field, 选择每行需要截取的以 -d 指定的符号或关键字进行分隔的区域, 从1开始, 与-f一起使用
  • -c #-#:characters, 以字符为单位进行分隔, 后接字符区间

1.3 示例

  • 以':'为分隔符, 截取 PATH 变量中的第一个路径
    cut -d ':' -f 1
[root@choco-01 ~]# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
[root@choco-01 ~]# echo $PATH | cut -d ':' -f 1
/usr/local/sbin
  • 截取 history 命令显示的信息中的命令部分
    history 5 | cut -c 7-
[root@choco-01 tmp]# history 5 | cut -c 7-
 which cd
 cd /tmp/
 ls
 vim aaa
 history 5 | cut -c 7-
  • 截取 history 命令显示的信息中的排序字段(注意: history命令的显示结果是以空格开始的)
    history 5 | cut -c 2-5
[root@choco-01 tmp]# history 5 | cut -c 2-5
1085
1086
1087
1088
1089

2. sort

排序用. 既然是排序, 就会涉及语系、以英文or数字进行排序等内容
2.1 用法
sort [-fbMnrtuk] [file or stdin]

2.2 选项

  • -f:忽略大小写
  • -b:忽略最前面的空格部分
  • -M:以月份进行排序,如:JAN,Feb,...,Dec
  • -n:以纯数字进行排序(默认是以字母进行排序)
  • -r:反响排序
  • -u:相当于uniq,相同的数据只出现一行
  • -t:分隔符,默认是 tab 键
  • -k:以哪个 field 来进行排序,常与 -t 配合使用

2.3 示例

  • 进行默认排序
[root@choco-01 ~]# head -5 /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin


[root@choco-01 ~]# head -5 /etc/passwd | sort 
adm:x:3:4:adm:/var/adm:/sbin/nologin
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
root:x:0:0:root:/root:/bin/bash
  • 以 UID 字段对 /etc/passwd 进行排序
[root@choco-01 ~]# head -10 /etc/passwd | sort -t ':' -k 3
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
  • 注意到上例中 operator 那一行了吗?怎么11排到了这里?——因为没有采用数字排序法
[root@choco-01 ~]# head -10 /etc/passwd | sort -t ':' -k 3 -n
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin                      # 这会就OK啦

3. wc

如果想知道某个文件或输出信息的行数、字符数、字数,怎么办?
—— world counts 用 wc

3.1 用法

wc -[lwm]

3.2 选项

  • 无选项:同时列出行数、词数、字符数
  • -l:仅列出行数
  • -w:仅列出词数
  • -m:仅列出字符数

3.3 示例

  • 显示文件的行数、词数、字符数
[root@choco-01 ~]# wc /etc/passwd
  24   36 1120 /etc/passwd
  • 仅显示行数 or 词数 or 字符数
[root@choco-01 ~]# wc /etc/passwd -l
24 /etc/passwd
[root@choco-01 ~]# wc /etc/passwd -w
36 /etc/passwd
[root@choco-01 ~]# wc /etc/passwd -c
1120 /etc/passwd

4. uniq

去重。排完序后,重复的内容显示太多?或者想统计每种重复的内容出现了几次?
—— 用uniq

4.1 用法

uniq -[ic]

4.2 选项

  • -i:忽略大小写
  • -c:计算每种内容重复的次数

4.3 示例

[root@choco-01 ~]# last | cut -d ' ' -f 1 | sort | uniq

reboot
root
wtmp
[root@choco-01 ~]# last | cut -d ' ' -f 1 | sort | uniq -c
      1 
     30 reboot
     61 root
      1 wtmp

5. tee

双重重定向。之前讲过重定向,不是输出到文件就是输出到屏幕,怎样同时输出到文件和屏幕呢?
—— 双重重定向,tee

5.1 用法

| tee

5.2 选项

  • -a:以追加方式进行重定向(默认是以覆盖方式进行)

5.3 示例

  • 默认以覆盖方式进行重定向

    [root@choco-01 ~]# ls | tee ls.txt
    anaconda-ks.cfg
    expect-test
    ls.txt

[root@choco-01 ~]# cat ls.txt 
anaconda-ks.cfg
expect-test
ls.txt


[root@choco-01 ~]# ls /tmp/ | tee ls.txt 
nano-2.3.1-10.el7.x86_64.rpm
systemd-private-5d8a8aa01a9c41998508565cbe753f65-chronyd.service-fbxoiZ
systemd-private-5d8a8aa01a9c41998508565cbe753f65-vgauthd.service-gYD808
systemd-private-5d8a8aa01a9c41998508565cbe753f65-vmtoolsd.service-e8LhLi
yum_save_tx.2018-05-30.09-24.ehBdYd.yumtx


[root@choco-01 ~]# cat ls.txt                              # 原先的内容不见了
nano-2.3.1-10.el7.x86_64.rpm
systemd-private-5d8a8aa01a9c41998508565cbe753f65-chronyd.service-fbxoiZ
systemd-private-5d8a8aa01a9c41998508565cbe753f65-vgauthd.service-gYD808
systemd-private-5d8a8aa01a9c41998508565cbe753f65-vmtoolsd.service-e8LhLi
yum_save_tx.2018-05-30.09-24.ehBdYd.yumtx
  • 以追加方式进行重定向
[root@choco-01 ~]# cat ls.txt 
nano-2.3.1-10.el7.x86_64.rpm
systemd-private-5d8a8aa01a9c41998508565cbe753f65-chronyd.service-fbxoiZ
systemd-private-5d8a8aa01a9c41998508565cbe753f65-vgauthd.service-gYD808
systemd-private-5d8a8aa01a9c41998508565cbe753f65-vmtoolsd.service-e8LhLi
yum_save_tx.2018-05-30.09-24.ehBdYd.yumtx


[root@choco-01 ~]# ls | tee -a ls.txt 
anaconda-ks.cfg
expect-test
ls.txt


[root@choco-01 ~]# cat ls.txt                       # 这次原内容没被覆盖
nano-2.3.1-10.el7.x86_64.rpm
systemd-private-5d8a8aa01a9c41998508565cbe753f65-chronyd.service-fbxoiZ
systemd-private-5d8a8aa01a9c41998508565cbe753f65-vgauthd.service-gYD808
systemd-private-5d8a8aa01a9c41998508565cbe753f65-vmtoolsd.service-e8LhLi
yum_save_tx.2018-05-30.09-24.ehBdYd.yumtx
anaconda-ks.cfg
expect-test
ls.txt

6. tr

常用于关键字的删除与替换,但功能基本可以靠 sed 替代

6.1 用法

tr -[ds]

6.2 选项

  • -d
  • -s

6.3 示例

  • 删除特定字符
[root@choco-01 /]# head -5 /etc/passwd | tr -d ':'   #冒号不见了
rootx00root/root/bin/bash
binx11bin/bin/sbin/nologin
daemonx22daemon/sbin/sbin/nologin
admx34adm/var/adm/sbin/nologin
lpx47lp/var/spool/lpd/sbin/nologin
  • 替换字符
[root@choco-01 /]# head -5 /etc/passwd | tr '[a-z]' '[A-Z]'
ROOT:X:0:0:ROOT:/ROOT:/BIN/BASH
BIN:X:1:1:BIN:/BIN:/SBIN/NOLOGIN
DAEMON:X:2:2:DAEMON:/SBIN:/SBIN/NOLOGIN
ADM:X:3:4:ADM:/VAR/ADM:/SBIN/NOLOGIN
LP:X:4:7:LP:/VAR/SPOOL/LPD:/SBIN/NOLOGIN

7. split

文件太大,想要切割开来?
—— 用 split

7.1 用法

split -[lb]

7.2 选项

  • -b #k:以容量进行切割,后接容量,可带单位如:b、k、m等
  • -l #:以行数进行切割,后接行数

7.3 示例

  • 按行数切割文件
[root@choco-01 ~]# cat split.test 
1
2
3
4
5
6
7
8
9
10

[root@choco-01 ~]# split -l 2 split.test SPLIT


[root@choco-01 ~]# ls SP*
SPLITaa  SPLITab  SPLITac  SPLITad  SPLITae
[root@choco-01 ~]# cat SPLITaa
1
2
  • 按容量切割文件
[root@choco-01 ~]# ll -h split.text 
-rw-r--r-- 1 root root 10M Jun  4 10:45 split.text


[root@choco-01 ~]# split -b 3M split.text SP               #以3M为单位进行切割


[root@choco-01 ~]# ll -h SP*                                        #从头切到尾,发现剩了1M,单独成为文件
-rw-r--r-- 1 root root 3.0M Jun  4 10:48 SPaa
-rw-r--r-- 1 root root 3.0M Jun  4 10:48 SPab
-rw-r--r-- 1 root root 3.0M Jun  4 10:48 SPac
-rw-r--r-- 1 root root 1.0M Jun  4 10:48 SPad

扩展知识

  • 关于PROMPT_COMMAND环境变量的含义

  • source exec 区别

  • Linux特殊符号大全

  • sort并未按ASCII排序

你可能感兴趣的:(2018-06-01 课堂笔记)