目录

  1. 文本工具
    1. 文本截取工具
      1. cat
      2. more
      3. less
      4. head
      5. tail
      6. cut
      7. paste
    2. 文本分析工具
      1. wc
      2. sort
      3. uniq
      4. diff
      5. grep
  2. 正则表达式
    1. 基本正则表达式

文本工具

文本截取工具

  • 文本内容: less、more和cat、tac、rev
  • 文本截取: head和tail
  • 按列截取: cut和paste
  • 关键字截取: grep
cat

cat [OPTIONS] [FILES]
将文件连接到标准输出,查看文本。如果没有文件,或者当文件为-时,读取标准输入。

OPTIONS 含义
-A, –show-all 相当于-vET
-b, –number-nonblank 非空行编号
-e 相当于-vE
-E, –show-ends 显示行结束符$
-n, –number 显示行号
-s, –squeeze-blank 连续空行成一行
-t 相当于-vT
-T, –show-tabs 显示制表符为^I
-v, –show-nonprinting 使用^和M-引用,除了LFD和TAB

test.txt

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
Mutability

by Percy Bysshe Shelley

The flower that smiles to-day

To-morrow dies;

All that we wish to stay

Tempts and then flies.

What is this world’s delight?

Lightning that mocks the night,

Brief even as bright.


catcat

tac上下倒序tac上下倒序

rev左右倒序rev左右倒序
more

more [OPTIONS] [FILES]
分页查看文本。

OPTIONS 含义
-d 显示翻页提示
-[number] 每个屏幕的行数
+[number] 从行号[number]开始显示
+/[string] 查找从[string]开始显示
b 上一页
空格 下一页
回车 下一行
less

less is more
less [OPTIONS] [FILES]

h 帮助
q 退出
e 下一行
y 上一行
b 上一页
z f 下一页
F 一直打印,相当于tail -f
/pattern 向后查找
?pattern 向前查找
&pattern 只显示符合的行
g 首行
G 最后一行
p% 到文件开头,或者是文件的百分之p

more和less的区别:
less可以使用键盘上下方向键显示上下内容,more不能。
less不必读取整个文件,加载速度会比more更快。
less退出后shell不会留下刚显示的内容,而more会。

head [OPTIONS] [FILES]
打印每个文件的前十行。超过一个文件时,会打印文件名。

OPTIONS 含义
-c, –bytes=[-]NUM 打印每个文件的前几个字节。
NUM为负时,打印每个文件的除最后NUM字节的全部内容
-n, –lines=[-]NUM 打印每个文件的前几行(默认是10)。
NUM为负时,打印每个文件的除最后NUM行的全部内容
-q, –quiet, –silent 不打印文件名
-v, –verbose 总是打印文件名
tail

tail [OPTIONS] [FILES]
打印每个文件的最后十行。超过一个文件时,会打印文件名。

OPTIONS 含义
-c, –bytes=[+]NUM 打印每个文件的最后几个字节。
-c +NUM,打印每个文件的除开头NUM字节的全部内容
-f, –follow[={name descriptor}]
-F 相当于–follow=name –retry
-n, –lines=[+]NUM 打印每个文件的最后几行(默认是10)。
-n +NUM,打印每个文件的除开头前NUM行的全部内容
-q, –quiet, –silent 不打印文件名
–retry 如果文件不可访问,会继续尝试打开它
-v, –verbose 总是打印文件名

tail -f、tail -F与tailf三者的区别:
tail -f相当于tail –follow=descriptor,根据文件描述进行追踪,当文件改名或删除后,停止追踪。
tail -F相当于tail –follow=name –retry,根据文件名字进行追踪,当文件改名或者删除后,保持重试,当有新的文件和她同名时,继续追踪。
tailf相当于tail -f -n 10。与tail -f不同的是,如果文件不增长,它不会去访问磁盘文件,所以tailf特别适合便携机上追踪日志文件,因为它减少了磁盘访问,可以省电。

cut

cut [OPTIONS] [FILES]
打印每个文件的每一行被选定的部分。

OPTIONS 含义
-b, –bytes=LIST 截取LIST字节
-c, –character=LIST 截取LIST字符
-d, –delimiter=DELIM 指定分隔符string,默认tab
-f, –fields=LIST 分隔后的几列
–complement 去除选定的字节、字符或字段集
-s, –only-delimited 不打印不包含限定的行
–output-delimiter=STRING 输出分隔符string

LIST的格式可以为:
N 第N个字节、字符或者列,从1开始。
N- 从第N个字节、字符或者列开始到文件最后。
N-M 从第N个字节、字符或者列开始到第M个字节、字符或者列。
-M 从文件开始到第M个字节、字符或者列。


cut -b 1 test.txtcut -b 1 test.txt

cut -c 2-5 test.txtcut -c 2-5 test.txt

cut -d t -f 1 test.txtcut -d t -f 1 test.txt

cut -d t -f 1 -s test.txtcut -d t -f 1 -s test.txt

cut -d t -f 1-2 -s --output-delimiter / test.txtcut -d t -f 1-2 -s --output-delimiter / test.txt
paste

paste [OPTIONS] [FILES]
合并文件同行号的到一行。

OPTIONS 含义
-d, –delimiters=LIST 指定分隔符,默认tab
-s, –serial paste one file at a time instead of in parallel

paste -d _wang test.txt test.txtpaste -d _wang test.txt test.txt

paste -s test.txt test.txtpaste -s test.txt test.txt

文本分析工具

wc

wc [OPTIONS] [FILES]
打印文件的行数、字数、字节数和文件名到一行。

OPTIONS 含义
-c, –bytes 打印字节数
-m, –chars 打印字符数
-l, –lines 打印行数
-L, –max-line-length 打印最长行的长度
-w, –words 打印单词数

wc /etc/passwdwc /etc/passwd

1
2
3
4
[root@controller-1 /root]$wc /etc/passwd
32 40 1643 /etc/passwd
| | | |
行数 字数 字节数 文件名
sort

sort [OPTIONS] [FILES]
文本排序。

ORDERING OPTIONS 含义
-b, –ignore-leading-blanks 忽略开头的空格
-d, –dictionary-order 只考虑空格、字符和数字
-f, –ignore-case 忽略大小写
-g, –general-numeric-sort 按数字排序
-i, –ignore-nonprinting 只考虑可被打印的字符
-M, –month-sort 月份排序((unknown) < ‘JAN’ < … < ‘DEC’)
-h, –human-numeric-sort 按可阅读的数字排序(例如:2K 1G)
-n, –numeric-sort 按数字排序
-R, –random-sort 随机
-r, –reverse 反向
OTHER OPTIONS 含义
-k, –key=KEYDEF 指定KEY排序,KEYDEF定义位置和类型信息
-o, –output=FILE 输出文件
-t, –field-separator=SEP 分隔符,排序时按指定字符分隔
-u, –unique 去除重复行

sort test.txtsort test.txt

sort -b test.txtsort -b test.txt

sort -f test.txtsort -f test.txt

cat num.txtcat num.txt

sort -n -r num.txt -o num.txtsort -n -r num.txt -o num.txt

cat date.txtcat date.txt

sort -t - -k 2 date.txtsort -t - -k 2 date.txt

sort -t - -k 3 date.txtsort -t - -k 3 date.txt

uniq

uniq [OPTIONS] [FILES]
去除重复行。

OPTIONS 含义
-c, –count 在每一行前面打印重复行的出现次数
-d, –repeated 只打印重复行
-D 打印重复行(所有的)
-i, –ignore-case 忽略大小写
-s, –skip-chars=N 忽略前N个字符
-u, –unique 只打印不重复行

uniq -c num.txtuniq -c num.txt

uniq -d num.txtuniq -d num.txt

uniq -D num.txtuniq -D num.txt

uniq -u num.txtuniq -u num.txt

diff

diff [OPTIONS] [FILES]
按行比较文件。

OPTIONS 含义
–normal 打印普通结果,默认
-q, –brief 当文件不同时,打印提示
-s, –report-identical-file 当文件相同时,打印提示
-c, -C NUM, –context[=NUM] 打印NUM(默认3)行上下文,以分开的方式
-u, -U NUM, –unified[=NUM] 打印NUM(默认3)行上下文,以合并的方式
-e, –ed 输出ed脚本
-y, –side-by-side 打印两列
-W, –width=NUM 每列至少NUM(默认130)宽度,配合-y使用
–left-column 只打印左边列,配合-y使用
–suppress-common-lines 只打印不同行,配合-y使用
-p, –show-c-function 若比较C语言的程序文件时,显示差异所在的函数名
–label LABEL 标签名替换文件名和时间戳,配合-c或-u使用
-t, –expand-tabs 在输出时,将tab字符展开
-T, –initial-tab 在每行前面加上tab字符
–tabsize=NUM tab字符大小(默认8)
-l, –paginate 分页
-r, –recursive 递归比较找到的所有子目录
–no-dereference 不遵循符号链接
-N, –new-file 将没有的文件视为空
–ignore-file-name-case 比较文件名时忽略大小写
–no-ignore-file-name-case 比较文件名时不忽略大小写
-x, –exclude=PAT 不比较指定文件PAT
-X, –exclude-from=FILE 不比较指定文件中的文件
-S, –starting-file=FILE 从指定目录开始比较
–from-file=FILE1 用FILE1和其他文件比较,FILE1可以是目录
–to-file=FILE2 用其他文件和FILE2比较, FILE2可以是目录
-i, –ignore-case 比较文件内容时,忽略大小写
-E, –ignore-tab-expansion 比较文件内容时,忽略tab扩展
-Z, –ignore-trailing-space 忽略行尾的空格
-b, –ignore-space-change 忽略空格数量
-w, –ignore-all-space 忽略所有空格
-B, –ignore-blank-lines 忽略空行
-I, –ignore-matching-lines=RE 忽略符合RE的行
-a, –text 将所有文件视为文本文件
-d, –minimal 以较小的单位来做比较
–color[=WHEN] 颜色,WHEN可以是never、always或者auto(默认auto)

cat test-1.txtcat test-1.txt

diff test.txt test-1.txtdiff test.txt test-1.txt

diff -c test.txt test-1.txtdiff -c test.txt test-1.txt

diff -u test.txt test-1.txtdiff -u test.txt test-1.txt

diff -y test.txt test-1.txtdiff -y test.txt test-1.txt

diff -i test.txt test-1.txtdiff -i test.txt test-1.txt

grep

grep [OPTIONS] PATTERN [FILES]

PATTERN

OPTIONS 含义
-E, –extended-regexp PATTERN是扩展正则表达式

正则表达式

基本正则表达式

字符匹配

字符 含义
. 匹配单个字符
[] 匹配中括号里任意字符
[^] 排除中括号里任意字符
[:alnum:] 匹配字母和数字
[:digit:] 匹配数字
[:alpha:] 匹配字母
[:lower:] 匹配小写字母
[:upper:] 匹配大写字母
[:blank:] 匹配空白字符(空格和tab)
[:space:] 匹配水平和垂直空白符
[:cntrl:] 匹配不可打印控制字符
[:graph:] 匹配可打印的非空字符
[:print:] 匹配可打印的字符
[:punct:] 匹配标点符号

匹配次数

字符 含义
* 匹配前面的字符>0次
.* 匹配任意长度的任意字符
\? 匹配前面的字符0或1次
\+ 匹配前面的字符>1次
\{n\} 匹配前面字符n次
\{m, n\} 匹配前面字符至少m次,最多n次
{, n\} 匹配前面字符最多n次
{n, \} 匹配前面字符最少n次

位置匹配

字符 含义
^ 行首
$ 行尾
^$ 空行
\< 或 \b 词首
\> 或 \b 词尾
\<WORD\> 整个单词

分组

字符 含义
\(WORD\) 字符串作为整体
\| 或者
\1 \2 分组引用