8月4号,主要学习内容如下:
一、抽取文本的工具:less,cat,head,tail,cut
二、分析文本的工具:wc,sort,diff,patch
二、grep及正则表达式
三、egrep扩展正则表达式
一、抽取文本的工具
1)文件查看命令:
2)分页查看工具
more [OPTIONS...] FILE...
less:一页一页地查看文件或STDIN输出
查看时有用的命令包括:/文本 搜索 文本
n/N 跳到下一个 or 上一个匹配
less 命令是man命令使用的分页器
head
head [OPTION]... [FILE]...
-c #: 指定获取前#字节
-n #: 指定获取前#行
-#: 指定行数(同-n#)
tail
tail [OPTION]... [FILE]...
-c #: 指定获取后#字节
-n #: 指定获取后#行
-#:指定行数
4)按列抽取文本cut和合并文件paste
cut [OPTION]... [FILE]...
-d DELIMITER: 指明分隔符,默认tab(-d和分隔符之间可以没有空格)-f FILEDS:
#: 第#个字段
#,#[,#]:离散的多个字段,例如1,3,6
#-#:连续的多个字段,例如1-6
混合使用:1-3,7
-c 按字符切割 --output-delimiter=STRING指定输出分隔符
cut -d: -f1 /etc/passwd
cat /etc/passwd | cut -d: -f7
cut -c2-5 /usr/share/dict/words
paste 合并两个文件同行号的列到一行
-d 分隔符:指定分隔符,默认用TAB-s : 所有行合成一行显示
paste f1 f2
paste -s f1 f2
二、文本分析工具
1)文本数据统计
wc:计数行总数、单词总数、字符总数(和字节总数),可以对文件或STDIN中的数据运行
wc story.txt
39 237 1901 story.txt
行数 字数 字符数
-l 只计数行数
-w 只计数单词总数
-c 只计数字节总数
-m 只计数字符总数
2)文本排序
sort:把整理过的文本显示在STDOUT(默认按照字符大小排序) 不改变原始文件
sort [options] file(s)
-r 执行反方向(由上至下)整理
-n 执行按数值大小整理
-f 选项忽略(fold)字符串中的字符大小写
-t c 选项使用c做为字段界定符
-k X 选项按照使用c字符分隔的X列来整理 能够使用多次
3)除重
uniq:从输入中删除重复的前后相接的行
uniq [OPTION]... [FILE]...
-d: 仅显示重复过的行
-u: 仅显示不曾重复的行:连续且完全相同方为重复
常和sort 命令一起配合使用: sort userlist.txt | uniq -c
4)比较文件
diff:逐行比较两个文件之间的区别,
diff [OPTION]... [OLDFILE] [NEWFILE] 显示oldfile与newfile相比的不同和措施
diff foo.conf-broken foo.conf-works
5c5 (注明第5行有区别)
< use_widgets = no
---
> use_widgets = yes
diff /PATH/TO/OLDFILE /PATH/TO/NEWFILE > /PATH/TO/PATCH_FILE
patch -i /PATH/TO/PATCH_FILE /PATH/TO/OLDFILE
patch /PATH/TO/OLDFILE < /PATH/TO/PATCH_FILE
三、grep及正则表达式
1)Linux上文本处理三剑客
grep:文本过滤(模式:pattern)工具
grep,egrep(支持扩展正则表达式),fgrep(不支持正则表达式搜索)
sed:stream editor,文本编辑工具
awk:Linux上的实现gawk,文本报告生成器
2)grep:Global search REgular expression and Print out the line
作用::文本搜索工具,根据用户指定的“模式”对目标文 本逐行进行匹配检查;打印匹配到的行; 模式:由正则表达式字符及文本字符所编写的过滤条件
grep [OPTIONS] PATTERN [FILE...]
grep root /etc/passwd
grep [OPTIONS] PATTERN [FILE...] grep root /etc/passwd
命令选项:
--color=auto: 对匹配到的文本着色显示
-v: 显示不能够被pattern匹配到的行
-i: 忽略字符大小写
-n:显示匹配的行号
-c: 统计匹配的行数
-o: 仅显示匹配到的字符串
-q: 静默模式,不输出任何信息 (配合echo $? 可用于写脚本)
-A #:after,同时显示后#行
-B #: before,前#行
-C #:context,前后各#行
-e:实现多个选项间的逻辑or关系
grep �e ‘cat ’ -e ‘dog’ file
-w:整行匹配整个单词
-E:使用ERE扩展的正则表达式
3)正则表达式
分两类: 基本正则表达式:BRE 扩展正则表达式:ERE
4)基本正则表达式
字符匹配
. : 匹配任意单个字符
[] : 匹配指定范围内的任意单个字符
[^] :匹配指定范围外的任意单个字符
[:digit:]、[:lower:]、[:upper:]、[:alpha:]、[:alnum:] 、[:punct:]、[:space:]
匹配次数(默认工作于贪婪模式:尽可能长的匹配)
*:匹配前面的字符任意次,包括0次
.*:任意长度的任意字符
\?:匹配其前面的字符0或1次
\+:匹配其前面的字符至少1次
\{m\}:匹配前面的字符m次
\{m,n\}:匹配前面的字符至少m次,至多n次
\{0,n\}:匹配前面的字符至多n次
\{m,\}:匹配前面的字符至少m次
位置锚定:定位出现的位置
^:行首锚定,用于模式的最左侧(^root 以root开头的行)
$:行尾锚定,用于模式的最右侧(root$ 以root结尾的行)
^PATTERN$: 用于模式匹配整行(整行只有此PATTERN)
^$: 空行(空白字符也不包括)
^[[:space:]]*$ :空白行(空行或包含空白字符的行)
单词:非特殊字符组成的连续字符(字符串)(包括数字,不包含特殊字符)
\< 或 \b:词首锚定,用于单词模式的左侧
\> 或 \b:词尾锚定;用于单词模式的右侧
\<PATTERN\>:匹配整个单词
分组及引用
分组:\( \):将一个或多个字符捆绑在一起,当作一个整体进 行处理,如:\(root\)\+
注:分组括号中的模式匹配到的内容会被正则表达式引擎记录 于内部的变量中,这些变量的命名方式为: \1,\2,\3,...\1: 从左侧起,第一个左括号以及与之匹配右括号之间 的模式所匹配到的字符
实例: \(string1\+\(string2\)*\)
\1: string1\+\(string2\)*
\2: string2
后向引用:引用前面的分组括号中的模式所匹配字符(而 非模式本身)
四、egrp及扩展的正则表达式
1)egrep
egrep = grep -E
egrep [OPTIONS] PATTERN [FILE...]
2)扩展正则表达式
字符匹配(同基本正则表达式)
次数匹配
*:匹配前面字符任意次
?: 0或1次
+:1次或多次
{m}:匹配m次
{m,n}:至少m,至多n次
{0,n} {m,}
位置锚定(同基本正则表达式)
分组
()
后向引用:\1,.....
或者
a|b
C|cat: C或cat
(C|c)at:Cat或cat
3)fgrep
不支持正则表达式元字符:当无需用到元字符去编写模式时,使用fgrep更好