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 '<keyword>' -f <fields>

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 用法

<command> | tee <file_name>

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] <keywords>

6.2 选项

  • -d <keyword>
  • -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] <file_name> <rename_Prefix>

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

扩展知识

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,547评论 6 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,399评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,428评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,599评论 1 274
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,612评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,577评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,941评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,603评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,852评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,605评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,693评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,375评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,955评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,936评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,172评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,970评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,414评论 2 342

推荐阅读更多精彩内容