文本三剑客grep爵士与手下的血泪奋战

文件查看命令: cat, tac,rev
cat [OPTION]… [FILE]…

  •  -E: 显示行结束符$

  • -n: 对显示出的每一行进行编号

  • -A:显示所有控制符

  • -b: 非空行编号

  • -s:压缩连续的空行成一行

Image 201608051932

文件查看

分页查看文件内容
more: 分页查看文件
more [OPTIONS…] FILE…
-d: 显示翻页及退出提示
less:一页一页地查看文件或STDIN输出
查看时有用的命令包括:
/文本 搜索 文本
n/N 跳到下一个 or 上一个匹配

Image 201608051936
less 命令是man命令使用的分页器

显示文本前或后行内容
head
head [OPTION]… [FILE]…

  • -c #: 指定获取前#字节

  • -n #: 指定获取前#行

  • -#: 指定行数

Image 201608051938
tail
tail [OPTION]… [FILE]…

  • -c #: 指定获取后#字节

  • -n #: 指定获取后#行

  • -#:

  • -f: 跟踪显示文件新追加的内容,常用日志监控

在后台监控文件更新,使用命令:tail -0 file &
(&:是能让程序在后台运行的命令)

Image 201608051951 (2)

按列抽取文本cut和合并文件paste
cut [OPTION]… [FILE]…

  • -d DELIMITER: 指明分隔符,默认tab

  • -f FILEDS:

  • #: 第#个字段

  • #,#[,#]:离散的多个字段,例如1,3,6

  • #-#:连续的多个字段, 例如1-6

  • 混合使用: 1-3,7

  • -c 按字符切割   –output-delimiter=STRING指定输出分隔符

 

cut和paste
显示文件或STDIN数据的指定列

cut -d: -f1 /etc/passwd
cat /etc/passwd | cut -d: -f7
cut -c2-5 /usr/share/dict/words

Image 201608051959
paste 合并两个文件同行号的列到一行
paste [OPTION]… [FILE]…
-d 分隔符:指定分隔符,默认用TAB
-s : 所有行合成一行显示
paste f1 f2
paste -s f1 f2

Image 201608052001

分析文本的工具

文本数据统计: wc
整理文本: sort
比较文件: diff和patch

Image 201608052003

收集文本统计数据wc

计数单词总数、行总数、字节总数和字符总数
可以对文件或STDIN中的数据运行

行数 字数 字符数

  • 使用 -l 来只计数行数

  • 使用 -w 来只计数单词总数

  • 使用 -c 来只计数字节总数

  • 使用 -m 来只计数字符总数

Image 201608052006

文本排序sort

把整理过的文本显示在STDOUT,不改变原始文件
$ sort [options] file(s)
常用选项

  • -r 执行反方向(由上至下)整理

  • -n 执行按数字大小整理

  • -f 选项忽略( fold)字符串中的字符大小写

  • -u 选项(独特, unique)删除输出中的重复行

  • -t c 选项使用c做为字段界定符

  • -k X 选项按照使用c字符分隔的X列来整理能够使用多次

Image 201608052008

 

uniq

uniq命令:从输入中删除重复的前后相接的行
uniq [OPTION]… [FILE]…

  • -c: 显示每行重复出现的次数;

  • -d: 仅显示重复过的行;

  • -u: 仅显示不曾重复的行;

连续且完全相同方为重复
常和sort 命令一起配合使用:
sort userlist.txt | uniq -c

比较文件
比较两个文件之间的区别
$ diff foo.conf-broken foo.conf-works
5c5
< use_widgets = no

> use_widgets = yes
注明第5行有区别(改变)

复制对文件改变patch
diff 命令的输出被保存在一种叫做“补丁”的文件中
使用 -u 选项来输出“统一的( unified)” diff格式文
件,最适用于补丁文件。
patch 命令复制在其它文件中进行的改变(要谨慎使用
!)
适用 -b 选项来自动备份改变了的文件
$ diff -u foo.conf-broken foo.conf-works > foo.patch
$ patch -b foo.conf-broken foo.patch

Image 201608052025Image 201608052026

练习
1、找出ifconfig命令结果中本机的所有IPv4地址
2、查出分区空间使用率的最大百分比值
3、查出用户UID最大值的用户名、 UID及shell类型
4、查出/tmp的权限,以数字方式显示
5、统计当前连接本机的每个远程主机IP的连接数,并按从大
到小排序

Linux上文本处理三剑客
grep:文本过滤(模式: pattern)工具;
grep, egrep, fgrep(不支持正则表达式搜索)
sed: stream editor,文本编辑工具;
awk: Linux上的实现gawk,文本报告生成器;

grep
grep: Global search REgular expression and Print out
the line.
作用:文本搜索工具,根据用户指定的“模式”对目标文
本逐行进行匹配检查;打印匹配到的行;
模式:由正则表达式字符及文本字符所编写的过滤条件
grep [OPTIONS] PATTERN [FILE…]

grep命令选项

  • –color=auto: 对匹配到的文本着色显示;

  • -v: 显示不能够被pattern匹配到的行;

  • -i: 忽略字符大小写

  • -n: 显示匹配的行号

  • -c: 统计匹配的行数

  • -o: 仅显示匹配到的字符串

  • -q: 静默模式,不输出任何信息

  • -A #: after, 后#行

  • -B #: before, 前#行

  • -C #: context, 前后各#行

  • -e:实现多个选项间的逻辑or关系

  • grep –e ‘cat ’ -e ‘dog’ file

  • -w:整行匹配整个单词

  • -E:使用ERE

正则表达式
REGEXP:由一类特殊字符及文本字符所编写的模式,其中有些字符(元字符)不表示字符字面意义,而表示控制或通配的功能

基本正则表达式元字符
字符匹配:

  • . : 匹配任意单个字符;

  • [] : 匹配指定范围内的任意单个字符

  • [^] :匹配指定范围外的任意单个字符

  • [:digit:]、 [:lower:]、 [:upper:]、 [:alpha:]、 [:alnum:]
    、 [:punct:]、 [:space:]

正则表达式
匹配次数:用在要指定次数的字符后面,用于指定前面的字
符要出现的次数

  • *:匹配前面的字符任意次,包括0次
    贪婪模式:尽可能长的匹配

  • .*:任意长度的任意字符

  • \?:匹配其前面的字符0或1次

  • \+:匹配其前面的字符至少1次

  • \{m\}:匹配前面的字符m次

  • \{m,n\}:匹配前面的字符至少m次,至多n次

  • \{,n\}:匹配前面的字符至多n次

  • \{m,\}:匹配前面的字符至少m次

正则表达式
位置锚定:定位出现的位置

  • ^:行首锚定,用于模式的最左侧

  • $:行尾锚定,用于模式的最右侧

  • ^PATTERN$: 用于模式匹配整行

  • ^$: 空行

  • ^[[:space:]]*$ :空白行

  • \< 或 \b:词首锚定,用于单词模式的左侧

  • \> 或 \b:词尾锚定;用于单词模式的右侧

  • \<PATTERN\>:匹配整个单词

正则表达式
分组: \(\):将一个或多个字符捆绑在一起,当作一个整体进
行处理,如: \(root\)\+
分组括号中的模式匹配到的内容会被正则表达式引擎记录
于内部的变量中,这些变量的命名方式为: \1, \2, \3, …

  • \1: 从左侧起,第一个左括号以及与之匹配右括号之间的模式所匹配到的字符;
    实例: \(string1\+\(string2\)*\)

  • \1: string1\+\(string2\)*

  • \2: string2

后向引用:引用前面的分组括号中的模式所匹配字符(而
非模式本身)

正则表达式
元字符 定义

  • ^ 行首

  • $ 行尾

  • . 任意单一字符

  • [] []内任意单一字符

  • [^] 除[]内任意单一字符

  • * *前面字符重复不确定次数

  • \+ \+前面字符重复一次以上不确定次数

  • \? ?前面字符重复0或1次

  • \ 转义符

  • .* 任意长度字符

  • \{n\} 前面字符重复n次

  • \{n,\} 前面字符重复n次以上

  • \{m,n\} 前面字符重复m次和n次之间

正则表达式

元字符 定义

  • [:alpha:] 所有字母,包括大、小写

  • [:alnum:] 所有字母和数字

  • [:upper:] 所有大写字母

  • [:lower:] 所有小写字母

  • [:digit:] 所有数字

  • [:punct:] 所有标点符号

  • [:space:] 空格和Tab

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

Image 201608052057 (2) Image 201608052057
2、显示/etc/passwd文件中不以/bin/bash结尾的行

Image 201608052055
3、显示用户rpc默认的shell程序

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

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

Image 201608052122
6、找出”netstat -tan”命令的结果中以’LISTEN’后跟0、 1
或多个空白字符结尾的行

Image 201608052124
7、添加用户bash、 testbash、 basher以及nologin(其shell为
/sbin/nologin),而后找出/etc/passwd文件中用户名同shell名
的行

Image 201608052127

egrep及扩展的正则表达式
egrep = grep -E
egrep [OPTIONS] PATTERN [FILE…]
扩展正则表达式的元字符:
字符匹配:

  • . 任意单个字符

  • [] 指定范围的字符

  • [^] 不在指定范围的字符

扩展正则表达式
次数匹配:

  • *:匹配前面字符任意次

  • ?: 0或1次

  • +: 1次或多次

  • {m}:匹配m次

  • {m,n}:至少m,至多n次

扩展正则表达式
位置锚定:

  • ^ :行首

  • $ :行尾

  • \<, \b :语首

  • \>, \b :语尾

  • 分组:()

  • 后向引用: \1, \2, …

  • 或者:

  • a|b

  • C|cat: C或cat

  • (C|c)at:Cat或cat

练习
1、显示当前系统root、 mage或wang用户的UID和默认shell

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

Image 201608052138
3、使用egrep取出/etc/rc.d/init.d/functions中其基名

Image 201608052138 (2)
4、使用egrep取出上面路径的目录名

Image 201608052141
5、统计以root身份登录的每个远程主机IP地址的登录次数

Image 201608052115
6、利用扩展正则表达式分别表示0-9、 10-99、 100-199、
200-249、 250-255

[0-9]

[1-9][1-9]

1[0-9][0-9]

2[0-4][0-9]

25[0-5]
7、显示ifconfig命令结果中所有IPv4地址

Image 201608052145

作业:

4、取本机ip地址

Image 201608052152
5、取各分区利用率的数值

Image 201608052154
6、统计/etc/init.d/functions 文件中每个单词出现的次数,并按频率从高到低显示

Image 201608052200
7、/etc/rc.d/init.d/functions或/etc/rc.d/init.d/functions/”  取目录名

做过了。略
8、正则表达式表示身份证号

Image 201608052216
9、正则表达式表示手机号

Image 201608052218
10、正则表达式表示邮箱

Image 201608052212
11、正则表达式表示QQ号

Image 201608052217

 

原创文章,作者:M20-石俊,如若转载,请注明出处:http://www.178linux.com/29856

(0)
M20-石俊M20-石俊
上一篇 2016-08-07
下一篇 2016-08-07

相关推荐

  • Linux下常用压缩工具总结

    gzip: 1)只能针对普通文件进行压缩,对文件夹、符号链接无效。 2)如果想对多个文件一起压缩并打包,gzip是无法办到的,需要结合tar进行 [root@mysql-master databackup]# ll 总用量 32 drwx—— 2 root root 4096&nb…

    Linux干货 2016-12-05
  • rsync+inotify实现数据的实时同步更新

      rsync可以实现触发式的文件同步,但是通过crontab守护进程方式进行触发,同步的数据和实际数据会有差异,而inotify可以监控文件系统的各种变化,当文件有任何变动时,就触发rsync同步,这样就可以解决同步数据的实时性问题。 一、rsync的优点与不足 rsync具有安全性高、备份迅速、支持增量备份等优点,通过rsync可以解决对实时性要求不高的…

    2018-01-06
  • Pinco Kumarhane sayesinde Yurt dışında Sorunsuz Oynamanın Yolları

    Pinco Kumarhane sayesinde Yurt dışında Sorunsuz Oynamanın Yolları İçindekiler Başlık Konular Bir Yabancı ülkelerde Dijital Casino Katılırken Dikkat Edilecekler İkinci Pinco Platfor…

    Linux干货 2025-01-08
  • 文本编辑器:vim 基础篇

       VI:Visual Interface,是一种文本编辑器,还是全屏编辑器。   VIM:Vi IMproved,vi的增强版,vim是模式化的编辑。 VIM的三种模式:        编辑模式(命令模式,默认模式)       插入模…

    Linux干货 2016-08-18
  • Linux程序包管理rpm、yum、源码编译

    概述:     众所周知,Linux操作系统本身,必须要借助额外的一些软件,才能完成某些应用的,操作系统如果没有应用程序的填充,就无法创造出生产力,这样即使再完美的操作系统,也毫无用处。那么本章就简要介绍一下Linux系统上对程序包的管理,分为以下三个部分:     1、程序包的…

    Linux干货 2016-08-24
  • ansible

    运维自动化发展历程,ansible 命令使用

    2018-01-13