1. grep 是行过滤工具;根据关键字进行行过滤

1.1语法
grep [选项] '关键字' 文件名
1.2选项
OPTIONS:
-i: 不区分大小写
-v: 查找不包含指定内容的行,反向选择
-w: 按单词搜索
-o: 打印匹配关键字
-c: 统计匹配到的行数
-n: 显示行号
-r: 逐层遍历目录查找
-A: 显示匹配行及后面多少行	
-B: 显示匹配行及前面多少行
-C: 显示匹配行前后多少行
-l:只列出匹配的文件名
-L:列出不匹配的文件名
-e: 使用正则匹配
-E:使用扩展正则匹配
^key:以关键字开头
key$:以关键字结尾
^$:匹配空行
--color=auto :可以将找到的关键词部分加上颜色的显示
1.3举例

当需要给搜索的关键字永久高亮显示时,修改 /etc/bashrc 文件,最后一行添加 alias grep=‘grep --color=auto’

grep -ni 'root' passwd      # 查找paawd文件中显示root的行,并且不区分大小写
grep -nv 'root' passwd      # 查找paawd文件中 不显示root的行
grep '^root' passwd         # 查找passwd文件中以root开头的行
grep 'root$' passwd         # 查找passwd文件中以root结尾的行
grep -nA 3 'root' passwd    # 查找包含root的后三行
grep -nB 3 'root' passwd    # 查找包含root的前三行
grep -nC 3 'root' passwd    # 查找包含root的前后三行

2. cut 列截取工具,用于列的截取

2.1语法
cut 选项  文件名
2.2选项
-c:	以字符为单位进行分割,截取
-d:	自定义分隔符,默认为制表符\t
-f:	与-d一起使用,指定截取哪个区域
2.3举例
cut -d: -f1 1.txt 			# 以:冒号分割,截取第1列内容
cut -d: -f1,6,7 1.txt 	    # 以:冒号分割,截取第1,6,7列内容
cut -c4 1.txt 			    # 截取文件中每行第4个字符
cut -c1-4 1.txt 			# 截取文件中每行的1-4个字符
cut -c4-10 1.txt 			# 截取文件中每行的4-10个字符
cut -c5- 1.txt 				# 从第5个字符开始截取后面所有字符

3. sort工具

用于排序;它将文件的每一行作为一个单位,从首字符向后,依次按ASCII码值进行比较,最后将他们按升序输出

3.1语法
sort 选项  文件名
3.2选项
-u :去除重复行
-r :降序排列,默认是升序
-o : 将排序结果输出到文件中,类似重定向符号>
-n :以数字排序,默认是按字符排序
-t :分隔符
-k :第N列
-b :忽略前导空格。
-R :随机排序,每次运行的结果均不同
3.3举例

1.txt文件
111
222
aaa
111

# sort -n -t: -k3 1.txt 			-n 按照数字排序,-t 以:为分隔符  -k3显示第三列
# sort -nr -t: -k3 1.txt 			降序排序
# sort -n 2.txt 				    按照数字排序
# sort -nu 2.txt 				    按照数字排序并且去重
# sort -nr 2.txt                    按照数字降序排序
# sort -nru 2.txt 					按照数字降序且去除重复行排序
# sort -n 2.txt -o 3.txt 			按照数字排序并将结果重定向到文件
# sort -R 2.txt 					随机排序
# sort -u 2.txt                     去除重复行排序

4. uniq工具

uniq用于去除连续的重复

4.1语法
sort 选项  文件名
4.2选项
-i: 忽略大小写
-c: 统计重复行次数
-d:只显示重复行

5. tee工具

tee工具是从标准输入读取并写入到标准输出和文件,即:双向覆盖重定向(屏幕输出|文本输入)

5.1选项
-a 双向追加重定向
# echo hello world
# echo hello world|tee file1   打印hello world 并写入到 file1文件
# cat file1 
# echo 999|tee -a file1        打印999 并写入到file1文件,之前的内容会覆盖
# cat file1

6. diff工具

diff工具用于逐行比较文件的不同

注意:diff描述两个文件不同的方式是告诉我们怎样改变第一个文件之后与第二个文件匹配

6.1语法
diff [选项] 文件1 文件2
6.2选项
-b	不检查空格	
-B	不检查空白行	
-i	不检查大小写	
-w	忽略所有的空格	
--normal	正常格式显示(默认)	
-c	上下文格式显示	
-u	合并格式显示
6.3举例
[root@MissHou ~]# cat file1
aaaa
111
hello world
222
333
bbb
[root@MissHou ~]# cat file2
aaa
hello
111
222
bbb
333
world
6.3.1 正常显示
diff目的:file1如何改变才能和file2匹配
[root@MissHou ~]# diff file1 file2
1c1,2					第一个文件的第1行需要改变(c=change)才能和第二个文件的第1到2行匹配			
< aaaa				小于号"<"表示左边文件(file1)文件内容
---					---表示分隔符
> aaa					大于号">"表示右边文件(file2)文件内容
> hello
3d3					第一个文件的第3行删除(d=delete)后才能和第二个文件的第3行匹配
< hello world
5d4					第一个文件的第5行删除后才能和第二个文件的第4行匹配
< 333
6a6,7					第一个文件的第6行增加(a=add)内容后才能和第二个文件的第6到7行匹配
> 333					需要增加的内容在第二个文件里是333和world
> world
6.3.2 上下文格式显示
·[root@MissHou ~]# diff -c file1 file2
前两行主要列出需要比较的文件名和文件的时间戳;文件名前面的符号***表示file1,---表示file2
*** file1       2019-04-16 16:26:05.748650262 +0800
--- file2       2019-04-16 16:26:30.470646030 +0800
***************	我是分隔符
*** 1,6 ****		以***开头表示file1文件,1,6表示1到6行
! aaaa				!表示该行需要修改才与第二个文件匹配
  111
- hello world		-表示需要删除该行才与第二个文件匹配
  222
- 333					-表示需要删除该行才与第二个文件匹配
  bbb
--- 1,7 ----		以---开头表示file2文件,1,7表示1到7行
! aaa					表示第一个文件需要修改才与第二个文件匹配
! hello				表示第一个文件需要修改才与第二个文件匹配
  111
  222
  bbb
+ 333					表示第一个文件需要加上该行才与第二个文件匹配
+ world				表示第一个文件需要加上该行才与第二个文件匹配
6.3.3 上下文格式显示合并格式显示
[root@MissHou ~]# diff -u file1 file2
前两行主要列出需要比较的文件名和文件的时间戳;文件名前面的符号---表示file1,+++表示file2
--- file1       2019-04-16 16:26:05.748650262 +0800
+++ file2       2019-04-16 16:26:30.470646030 +0800
@@ -1,6 +1,7 @@
-aaaa
+aaa
+hello
 111
-hello world
 222
-333
 bbb
+333
+world

2. bash的特性

2.1命令和文件自动补全

Tab只能补全命令和文件 (RHEL6/Centos6)

2.2常见的快捷键
ctrl + c   			终止前台运行的程序
ctrl + z	  			将前台运行的程序挂起到后台
ctrl + d   			退出 等价exit
ctrl + l   			清屏 
ctrl + a |home  	光标移到命令行的最前端
ctrl + e |end  	光标移到命令行的后端
ctrl + u   			删除光标前所有字符
ctrl + k   			删除光标后所有字符
ctrl + r	 			搜索历史命令
2.3常用的通配符(重点)
*:	匹配0或多个任意字符
?:	匹配任意单个字符
[list]:	匹配[list]中的任意单个字符,或者一组单个字符   [a-z]
[!list]: 匹配除list中的任意单个字符
{string1,string2,...}:匹配string1,string2或更多字符串


# rm -f file*              删除file开头的文件
# cp *.conf  /dir1     复制.conf结尾的文件到dir1目录
# touch file{1..5}     创建文件file1,file2......file5
2.4bash中的引号(重点)
  1. 双引号"" :会把引号的内容当成整体来看待,允许通过$符号引用其他变量值
  2. 单引号’’ :会把引号的内容当成整体来看待,禁止引用其他变量值,shell中特殊符号都被视为普通字符
  3. 反撇号`` :反撇号和$()一样,引号或括号里的命令会优先执行,如果存在嵌套,反撇号不能用
echo  "Hello world"     Hello world
 echo  'Hello world'      Hello world
 echo  "$(date + %F)"     2020-08-16
 echo  '$(date + %F)'      $(date + %F)
 echo "`date + %F`"		   2020-08-16