2017 07.24 文本处理工具

一 文件查看cat

  • -E: 显示行结束符$
    创建一个文件——nano f1,在文本编辑中在b和d之间补一个tab键
    [root@centos7 ~]#nano f1
    [root@centos7 ~]#cat f1
    a
    d
    b d
    [root@centos7 ~]#nano f1
    [root@centos7 ~]#cat -E f1
    a$
    b$
    c d $
    不执行-E时,无法看
    -n: 对显示出的每一行进行编号
    [root@centos7 ~]#cat -n f1
    1 a
    2 b
    3 c d
    -A:显示所有控制符 ——将tab键位显示出来
    [root@centos7 ~]#cat -A f1
    a$
    b$
    c^Id $
    -b:非空行编号
    [root@centos7 ~]#cat -n f1
    1 a
    2
    3
    4 b
    5
    6
    7 c d
    [root@centos7 ~]#cat -b f1
    1 a
    2 b
    3 c d
    -s:压缩连续的空行成一行
    image.png
  • tac——倒着显示(行与行)


    image.png
  • rev——每行字符倒着显示


    image.png

二 分页查看文件内容

  • (1)more: 分页查看文件

    在看文件时,执行cat /var/log/message时,不能看见每一页内容,会直接显示最后一行并退出
    image.png

    此时执行more命令时,可以一页一页的显示,按空格键往下翻页,按b键往下翻页,并显示进度
    image.png

    more [OPTIONS...] FILE... -d: 显示翻页及退出提示 
    less:一页一页地查看文件或STDIN输出 ——作用和more类似,pageup,pagedown上下翻页
    查看时有用的命令包括: /文本 搜索 文本 n/N 跳到下一个 或 上一个匹配
    less 命令是man命令使用的分页器
    管道方式—— ls -R |more或是less来进行翻页,但是more的管道方式不能往回翻页

三 显示文本前或后行内容

  • head(头部),显示前多少个字节

    不加选项的时候执行head命令默认显示前十行显示:
    image.png

    -c #: 指定获取前#字节 ——head -c3 file 显示该文件前三个字节的内容
    image.png

    -n #: 指定获取前#行——head -n3 显示 /etc/passwd文件中的前三行内容


    image.png

    -#: 指定行数——直接 head -3,直接显示前三行和-n效果一样
  • tail (尾部),显示后多少个字节

    不加选项时默认显示后十行:
    image.png

    -c #: 指定获取后#字节
    image.png

    -n #: 指定获取后#行
    image.png

    -#:原理同head
    -f: 跟踪显示文件新追加的内容,常用日志监控
  • 打开两个终端观察——tail -f mail.txt
    [root@centos7 ~]#tail -f mail.txt
    "help"
    hi ,root
    i am root
    The system version is here,please help me to check it ,thanks!
    CentOS release 6.9 (Final)
    woaini
    在另外一个终端窗口
    [root@centos7 ~]#echo wo ai laowang >>mail.txt
    在之前的窗口显示
    [root@centos7 ~]#tail -f mail.txt
    "help"
    hi ,root
    i am root
    The system version is here,please help me to check it ,thanks!
    CentOS release 6.9 (Final)
    woaini
    wo ai laowang

四 按列抽取文本cut和合并文件paste

cut

  • -d DELIMITER: 指明分隔符,默认tab
    -f FILEDS: #: 第#个字段 #,#[,#]:离散的多个字段,例如1,3,6 #-#:连续的多个字段, 例如1-6 混合使用:1-3,5
    [root@centos7 ~]#cut -d: -f1,3-5 /etc/passwd——以':'作为分隔符,取第一列和三到五列
    root:0:0:root
    bin:1:1:bin
    daemon:2:2:daemon
    adm:3:4:adm
    lp:4:7:lp
    sync:5:0:sync
    shutdown:6:0:shutdown
    -c 按字符切割
    [root@centos7 ~]#who
    root :0 2017-07-25 08:00 (:0)
    root pts/2 2017-07-25 14:11 (:0)
    root pts/3 2017-07-25 14:11 (192.168.136.1)
    [root@centos7 ~]#who |cut -c-9
    root
    root
    root
    --output-delimiter=STRING指定输出分隔符
  • 小练习

只显示df内容中use利用率的那一列
方法一:[root@centos7 ~]#df |tr -s " "|cut -d" " -f5
Use%
10%
0%
1%
2%
0%
17%
1%
1%
100%
方法二:[root@centos7 ~]#df |tr -s " "|cut -d" " -f5|tr -d "%"
Use
10
0
1
2
0
17
1
1
100
方法三:[root@centos7 ~]#df |tr -s " "|cut -d" " -f5|cut -d% -f1
Use
10
0
1
2
0
17
1
1
100
方法四:[root@centos7 ~]#df |tr -s " " "%"|cut -d% -f5
Use
10
0
1
2
0
17
1
1
100
练习二 只显示ifconfig ens33的ip地址
[root@centos7 ~]#ifconfig ens33
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.136.141 netmask 255.255.255.0 broadcast 192.168.136.255
inet6 fe80::28af:dcce:a76d:da1b prefixlen 64 scopeid 0x20<link>
ether 00:0c:29:02:59:96 txqueuelen 1000 (Ethernet)
RX packets 12958 bytes 1090604 (1.0 MiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 10349 bytes 7092395 (6.7 MiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
[root@centos7 ~]#ifconfig ens33 |head -n2|tail -n1 |tr -s " "|cut -d" " -f3
192.168.136.141

paste

意义:合并两个文件同行号的列到一行
[root@centos7 ~]#cat f2
I LOVE YOU SISTER
\S
KERNEL \R ON AN \M
[root@centos7 ~]#cat f1
a
b
c d
[root@centos7 ~]#paste f1 f2
a I LOVE YOU SISTER
\S
b KERNEL \R ON AN \M
c d
-d 分隔符:指定分隔符,默认用TAB
paste -d"---" f1 f2
[root@centos7 ~]#paste -d"---" f1 f2
a -I LOVE YOU SISTER
-
-\S
b -KERNEL \R ON AN \M
-
-
c d -
-s : 所有行合成一行显示 ——paste -s f1 f2
a b c d
I LOVE YOU SISTER \S KERNEL \R ON AN \M

五 分析文本的工具

  • 收集文本统计数据wc

计数单词总数、行总数、字节总数和字符总数 
可以对文件或STDIN中的数据运行 $
wc story.txt 39 237 1901 story.txt
行数 字数 字符数 
使用 -l 来只计数行数——显示文件一共有多少行使用
[root@centos7 ~]#cat f1
a
b
c d
[root@centos7 ~]#wc -l f1
7 f1
-w 来只计数单词总数 
[root@centos7 ~]#wc -w f1
4 f1
使用 -c 来只计数字节总数 
[root@centos7 ~]#wc -c f1
31 f1——空格也算字节
使用 -m 来只计数字符总数
[root@centos7 ~]#cat /etc/issue
i love you sister
\S
Kernel \r on an \m
[root@centos7 ~]#wc -m /etc/issue
42 /etc/issue

  • 文本排序sort

把整理过的文本显示在STDOUT,不改变原始文件
[root@centos7 ~]#df |tr -s " " % |cut -d"%" -f5|sort
0
0
1
1
1
10
100
17
2
Use——按照每行第一字符大小排序
$ sort [options] file(s) 
常用选项 
-n 执行按数字大小整理
[root@centos7 ~]#df |tr -s " " % |cut -d"%" -f5|sort -n
0
0
Use
1
1
1
2
10
17
100
-r 执行反方向(由上至下)整理 

  • sort -r /etc/issue


    image.png

    -f 选项忽略(fold)字符串中的字符大小写 
    -u 选项(独特,unique)删除输出中的重复行


    image.png
    >* -t c 选项使用c做为字段界定符 ——类似cut -d
    [root@centos7 ~]#sort -t: -k3 -nr /etc/passwd

    nfsnobody:x:65534:65534:Anonymous NFS User:/var/lib/nfs:/sbin/nologin
    tom:x:1009:1001::/app/jackdir:/bin/bash
    libai:x:1008:1007::/home/libai:/bin/bash
    likui:x:1007:1007::/home/likui:/bin/bash
    sasles:x:1006:1007::/home/sasles:/bin/bash
    sarah:x:1005:1006:sa,xiaoshou,10088,182568877:/home/sarah:/sbin/nologin
    harry:x:1004:1005::/home/harry:/bin/bash
    natasha:x:1003:1004::/home/natasha:/bin/bash
    wangcai:x:1001:1001::/home/wangcai:/bin/bash
    hangnan:x:1000:1000:zhangnan,jishubu,10086,1024:/home/zhangnan:/bin/bash

  • uniq

uniq命令:从输入中删除前后相接的重复的行


image.png

uniq [OPTION]... [FILE]...
-c: 显示每行重复出现的次数


image.png

image.png

-d: 仅显示重复过的行
image.png

-u: 仅显示不曾重复的行 连续且完全相同方为重复


image.png

常和sort 命令一起配合使用: sort userlist.txt | uniq -c

六 Linux文本处理三剑客 —grep

grep: Global search REgular expression and Print out the line

作用:文本搜索工具,根据用户指定的“模式”对目标文 本逐行进行匹配检查;打印匹配到的行
image.png

模式:由正则表达式字符及文本字符所编写的过滤条件


image.png

--color=auto: 对匹配到的文本着色显示
image.png

-v: 显示不被pattern匹配到的行
image.png

-i: 忽略字符大小写
image.png

-c: 统计匹配的行数
image.png

-n:显示匹配的行号
image.png

-o: 仅显示匹配到的字符串
image.png

-q: 静默模式,不输出任何信息
image.png

-A #: after, 后#行
image.png

-B #: before, 前#行 
image.png

-C #:context, 前后各#行
image.png

-e:实现多个选项间的逻辑or关系 grep –e ‘cat ’ -e ‘dog’ file
image.png

-w:匹配整个单词 :单词的含义是'wang' 'wang-laozhang' 'wang:zhang' 而'wang_lao'不是单词
-E:使用ERE ——等于egerp
-F:相当于fgrep,不支持正则表达式

基本正则表达式元字符

字符匹配: . 匹配任意单个字符 'r..t'匹配两个字符


image.png

[] 匹配指定范围内的任意单个字符——grep [root] /etc/passwd


image.png

[^] 匹配指定范围外的任意单个字符—— grep [^root] /etc/passwd
image.png

[:alnum:] 字母和数字
[:alpha:] 代表任何英文大小写字符,亦即 A-Z, a-z
[:lower:] 小写字母 [:upper:] 大写字母
[:blank:] 空白字符(空格和制表符)
[:space:] 水平和垂直的空白字符(比[:blank:]包含的范围广)
[:cntrl:] 不可打印的控制字符(退格、删除、警铃...)
[:digit:] 十进制数字
[:xdigit:]十六进制数字
[:graph:] 可打印的非空白字符
[:print:] 可打印字符
[:punct:] 标点符号

正则表达式

  • 匹配次数:用在要指定次数的字符后面,用于指定前面的字 符要出现的次数

'星号' 匹配前面的字符任意次,包括0次 贪婪模式:尽可能长的匹配
.* 任意长度的任意字符
? 匹配其前面的字符0或1次
+ 匹配其前面的字符至少1次
{n} 匹配前面的字符n次
{m,n} 匹配前面的字符至少m次,至多n次
{,n} 匹配前面的字符至多n次
{n,} 匹配前面的字符至少n次
位置锚定:定位出现的位置
^ 行首锚定,用于模式的最左侧
$ 行尾锚定,用于模式的最右侧
^PATTERN$ 用于模式匹配整行
^$ 空行 ^[[:space:]]$ 空白行
< 或 \b 词首锚定,用于单词模式的左侧
> 或 \b 词尾锚定;用于单词模式的右侧
<PATTERN> 匹配整个单词
分组:() 将一个或多个字符捆绑在一起,当作一个整体进 行处理,如:(root)+  分组括号中的模式匹配到的内容会被正则表达式引擎记录于内部的变量中,这些变量的命名方式为: \1, \2, \3, ... 
\1 表示从左侧起第一个左括号以及与之匹配右括号之间的 模式所匹配到的字符 
示例: (string1+(string2)
) \1 :string1+(string2)* \2 :string2 
后向引用:引用前面的分组括号中的模式所匹配字符,而非 模式本身 
或者:|
示例:a|b: a或b C|cat: C或cat (C|c)at:Cat或cat

'以练习题来展示上述命令'

1、显示/proc/meminfo文件中以大小s开头的行(要求:使用两 种方法)


image.png

2、显示/etc/passwd文件中不以/bin/bash结尾的行 


image.png

3、显示用户rpc默认的shell程序 
image.png

4、找出/etc/passwd中的两位或三位数


image.png


5、显示CentOS7的/etc/grub2.cfg文件中,至少以一个空白 字符开头的且后面存非空白字符的行 
image.png

6、找出“netstat -tan”命令的结果中以‘LISTEN’后跟任意多 个空白字符结尾的行
image.png

7、显示CentOS7上所有系统用户的用户名和UID
image.png

8、添加用户bash、testbash、basher、sh、nologin(其shell 为/sbin/nologin),找出/etc/passwd用户名同shell名的行 


image.png

9、利用df和grep,取出磁盘各分区利用率,并从大到小排序
image.png
  • egrep及扩展的正则表达式

egrep = grep -E egrep [OPTIONS] PATTERN [FILE...] 
扩展正则表达式的元字符: 
字符匹配:
. 任意单个字符 [] 指定范围的字符 [^] 不在指定范围的字符
次数匹配:
*:匹配前面字符任意次
?: 0或1次
+:1次或多次
{m}:匹配m次
{m,n}:至少m,至多n次
位置锚定: ^ :行首 $ :行尾 <, \b :语首 >, \b :语尾 
分组: () 后向引用:\1, \2, ... 
或者: a|b: a或b C|cat: C或cat (C|c)at:Cat或cat

以练习题来解释上述命令

1、显示三个用户root、mage、wang的UID和默认shell


image.png

2、找出/etc/rc.d/init.d/functions文件中行首为某单词(包 括下划线)后面跟一个小括号的行 


image.png

3、使用egrep取出/etc/rc.d/init.d/functions中其基名 
image.png

4、使用egrep取出上面路径的目录名


image.png

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

推荐阅读更多精彩内容