本章内容
▼文本工具
▷文件截取工具
●文件内容:less,more和cat,tac,rev
●文件截取:head和tail
●按列抽取:cut,paste
●关键字:grep
1. cat [OPTION] file 查看文本文件
[OPTION]
-E `显示行结束符$`
-n `显示行号`
-A `显示控制符`
-b `非空行编号`
-s `连续空行成一行`
`cat`
[root@CentOS7 dir1]$cat f1
abc
abcde
[root@CentOS7 dir1]$cat -E f1
123456$
12345$
1234$
123$
`tac上下倒序`
[root@CentOS7 dir1]$tac f1
abcde
abc
`rev左右倒序`
[root@CentOS7 dir1]$rev f1
cba
edcba
2. more [OPTION] file 分页查看
[OPTION]
-d `显示翻页提示`
b `上一页`
空格 `下一页`
回车 `下一行`
3. less [OPTION] file 分页查看
/STRING `搜索文本`
n `下一个(搜索)`
N `下一个(搜索)`
q `退出`
*man命令使用less命令
4. head [OPTION] file
[OPTION]
-c NUM `选取前num字节`
-n NUM `选取前num行`
[root@CentOS7 dir1]$head -n 3 /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
`生成随机密码`
[root@CentOS7 dir1]$cat /dev/urandom | tr -dc [:alnum:] |head -c 8
7zy21yxo
[root@CentOS7 dir1]$
5. tail [OPTION] *file
[OPTION]
-c NUM `选取前num字节`
-n NUM `选取前num行`
-f `实时刷新文件`
-F `实时刷新文件/跟踪文件名`
tailf = tail -f
[root@CentOS7 dir1]$tail -n 3 /etc/passwd
jibill:x:1000:1000:jibill:/home/jibill:/bin/bash
tom99:x:800:1000:service:/data/tom:/bin/nologin
wang:x:1001:1001::/home/wang:/bin/bash
6. cut [OPTION] file
[OPTION]
-d STRING `指定分隔符string,默认tab`
-f NUM `第num列`
-c NUM `按字符切割`
--output-delimiter=STRING `输出分隔符string`
[root@CentOS7 dir1]$cut -d : -f 1 /etc/passwd
root
bin
daemon
adm
lp
`按字符分隔`
[root@CentOS7 dir1]$cat f4
123456i654321
12345i54321
1234i4321
123i321
[root@CentOS7 dir1]$cut -c2-3 f4
23
23
23
23
...
7. paste [OPTION] file
[OPTION]
-d CHAR `指定分隔符,默认tab`
-s `显示成行`
[root@CentOS7 dir1]$paste -d: f1 f3
123456:654321
12345:54321
1234:4321
123:321
▷文本分析工具
文本统计:wc
整理文本:sort
比较文件:diff 和 patch
8. wc [OPTION] file
[OPTION]
-l `行数`
-w `单词数`
-c `字节数`
-m `字符数`
-L `最长行的长度`
[root@CentOS7 dir1]$wc /etc/passwd
45 89 2352 /etc/passwd
| | | |
`行数` `字数` `字节数` `文件名`
[root@CentOS7 dir1]$ls /run/media/root/CentOS\ 7\ x86_64/Packages/*.rpm |wc -l
10019
9.sort [OPTION] file文本排序
[OPTION]
-r `反向`
-R `随机`
-n `数字`
-f `忽略大小写`
-u `删除重复行`
-t CHAR `以CHAR为分隔符`
-k NUM `分隔后的第NUM列`
10. uniq [OPTION] file删除重复行
[OPTION]
-c `重复行出现次数`
-d `仅显示重复的行`
-u `仅显示不重复的行`
11.diff [OPTION] file1 file2
[root@CentOS7 dir1]$diff -u f1 f2
--- f1 2019-05-03 16:33:25.294186421 +0800
+++ f2 2019-05-03 15:48:55.998025353 +0800
@@ -1,2 +1,5 @@
-wang
-jibill
+1
+2
+3
+4
+5
12.patch [OPTION] file
`复原文件`
diff -u f1 f2 > file.patch
patch -b f1 file.patch
13. grep [OPTION] STRING file
[OPTION]
-v `显示不被匹配的行`
-i `忽略大小写`
-n `显示行号`
-c `统计行数`
-o `仅显示匹配到的STRING`
-q `不输出`
-A NUM `显示后NUM行`
-B NUM `显示前NUM行`
-C NUM `显示前后NUM行`
-e `or`
-w `匹配单词`
-E `使用ERE,扩展正则表达式,egrep`
-F `fgrep,不支持正则表达式`
-f FILE `从模式文件处理`
▼正则表达式
Regular Expressions:
- 基本正则表达式:BRE
- 扩展正则表达式:ERE
- 元字符:字符匹配、匹配次数、位置锚定、分组
▷字符匹配:
字符 | 用途 |
---|---|
. |
匹配单个字符 |
[] |
中括号里任意字符 |
[^] |
排除中括号里任意字符 |
[: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\) |
字符串做为整体 |
\| |
或者 |
分组引用
例: \(str1\+ \(str2\)* \)
\1 : str1\+\)str2\)*
\2 : str2
练习
▷扩展正则表达式
与正则表达式就差\