微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

文本处理工具与正则表达式、grep

一、文本处理工具

1.文本查看命令

cat [OPTION]… [FILE]…

-n 显示行号

-b 空格行不加行号,有字符的行才加

-s 相邻的空行压缩为一行,长和-n联用

-v 处理windows中的^M

-T 可以看到tab\space

-A 显示所有控制符(包括windows文本中的^M,^T)

-E 显示行结束符$ (回车)

tac[OPTION]… [FILE]…将每个指定文件按行倒置并写到标准输出

效果与cat 相反

rev 将指定文件从最后一个字符开始显示到第一个字符。

效果比较:

spacer.gif

cat.PNGPHP/upload/image/20160805/1470407076660904.png">

2.分页查看文件内容

more 分页查看文件(无法向前面翻,只能往后面看)

more [OPTIONS…] FILE…

-d: 显示翻页退出提示

常用快捷操作:

Enter向下n行,需要定义。认为1行

Ctrl+F向下滚动一屏

空格键向下滚动一屏

Ctrl+B返回上一屏

=输出当前行的行号

:f输出文件名和当前行的行号

V 调用vi编辑器

!cmd调用Shell,并执行命令

q 退出more

less 一页一页地查看文件或STDIN输出(与more类似,但是支持上下翻)

常用快捷操做:

/字符串:向下搜索“字符串”的功能

?字符串:向上搜索“字符串”的功能

n:重复前一个搜索(与/或?有关)

N:反向重复前一个搜索(与/或?有关)

b向后翻一页

d向后翻半页

h显示帮助界面

Q退出less命令

u向前滚动半页

y向前滚动一行

空格键滚动一行

回车键滚动一页

[pagedown]:向下翻动一页

[pageup]:向上翻动一页

3.显示文本前、后行内容

head 显示指定文件的开头至标准输出

head [OPTION]… [FILE]…

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

-n #: 指定获取前#行

-#: 指定行数

tail 显示指定文件的结尾至标准输出

tail [OPTION]… [FILE]…

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

-n #: 指定获取后#行

-#: 指定从结尾开始的#行内容

+#: 指定从开头开始的#行内容

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

常用方法:tail-n 0 -f file & (放入后台跟踪文件新追加的内容,有新加入内

容则弹出)

4.文本抽取、合并

cut [OPTION]… [FILE]… 按列抽取文本指定内容

-d 分隔符 : 指明分隔符,认tab

-f FILEDS:

#: 第#个字段

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

m-n:连续的多个字段,例如1-6

混合使用: 1-3,7 取1至3,第七字段

-c 按字符切割

-c M-N 取第M-N个字符之间的内容

�output-delimiter=STRING指定输出分隔

使用示例:

cut -d: -f1 /etc/passwd

cat /etc/passwd | cut -d: -f7

cut -c2-5 /usr/share/dict/words

paste 合并两个文件同行号的列到一行

paste [OPTION]… [FILE]…

-d 分隔符 :指定分隔符,认用TAB

-s : 所有行合成一行显示

使用示例

文件f1: 文件f2 :

1 a

2 b

3 c

4 d

spacer.gif

paste.PNGPHP/upload/image/20160805/1470407219209338.png">

5.文本数据统计

wc 统计指定文件中的字节数、单词数、行数,并将统计结果显示输出

直接使用 wc file ―>

行数 字数 字符数(= 字节数)

常用选项:

-c,�bytes统计字节数

-m,�chars 统计字符数

-l,�lines 统计行数

-L,�max-line-length 统计最长行的长度

-w,�words 统计单词数

6.文本排序

sort把整理过的文本显示在STDOUT,不改变原始文件

$ sort [options] file(s)

常用选项

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

-n 执行按数字大小整理

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

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

-t c 选项使用c做为字段分隔符

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

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

uniq [OPTION]… [FILE]…

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

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

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

连续且完全相同方为重复

常和sort 命令一起配合使用:

sort userlist.txt | uniq -c

7.文件比较

比较两个文件间的区别

$ diff foo.conf-broken foo.conf-works

5c5

< use_widgets = no

> use_widgets = yes

注明第5行有区别(改变)

diff 命令的输出被保存在一种叫做“补丁”的文件

使用 -u 选项来输出“统一的( unified)” diff格式文件,最适用于补丁文件

patch 命令复制在其它文件中进行的改变(要谨慎使用!)

适用 -b 选项来自动备份改变了的文件

$ diff -u foo.conf-broken foo.conf-works > foo.patch

#将两个文件的不同之处保存至备份文件

$ patch -b foo.conf-broken foo.patch #恢复备份信息


二、正则表达式

1.grep: Global search REgular expression and Print out the line.

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

打印匹配到的行;

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

grep [OPTIONS] PATTERN [FILE…]

使用示例:

grep root /etc/passwd

grep "$USER" /etc/passwd

grep '$USER' /etc/passwd

grep `whoami` /etc/passwd

常用选项:

�color=auto: 对匹配到的文本着色显示

(CentOS7中,认已经使用命令别名

alias grep = grep �clor=auto)

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

-i: 忽略字符大小写

-n: 显示匹配的行号

-c: 统计匹配的行数

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

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

-A #: after,后#行

-B #: before,前#行

-C #: context,前后各#行

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

eg: grep �e ‘cat ’ -e ‘dog’ file

-w:整行匹配整个单词

-E:使用ERE 拓展表达式

2.正则表达式

REGEXP:由一类特殊字符及文本字符所编写的模式,其中有些字符(元字符)不表示字符字

面意义,而表示控制或通配功能

程序支持: grep,vim,less,Nginx

分类

基本正则表达式: BRE

扩展正则表达式: ERE

grep -E,egrep

正则表达式引擎:

采用不同算法,检查处理正则表达式的软件模块PCRE( Perl Compatible Regular

Expressions)

元字符分类:字符匹配、匹配次数、位置锚定、分组

帮组信息: man 7 regex

字符匹配:

. : 匹配任意单个字符;

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

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

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

spacer.gif

1470407442800921.pngPHP/upload/image/20160805/1470407442800921.png">

1470407442228787.pngPHP/upload/image/20160805/1470407442228787.png">

spacer.gif

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

*:匹配前面的字符任意次,包括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

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

3.egrep 拓展正则表达式

egrep = grep -E

egrep [OPTIONS] PATTERN [FILE…]

扩展正则表达式的元字符:

字符匹配:

. 任意单个字符

[] 指定范围的字符

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

次数匹配:

*:匹配前面字符任意次

?: 0或1次

+: 1次或多次

{m}:匹配m次

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

位置锚定:

^ :行首

$ :行尾

\<,\b :语首

\>,\b :语尾

分组:

( )

后向引用: \1,…

或者:

a|b

C|cat: C或cat

(C|c)at:Cat或cat

原文地址:https://www.jb51.cc/regex/358922.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐