一、文本处理工具

1、grep *

grep是过滤工具;用于根据关键字进行过滤。

语法和选项

语法

  1. grep [选项] '关键字' 文件名

常见选项:

# options:
    -i : 不区分大小写
  -v : 查找不包含指定内容的行,反向选择
  -w : 按单词搜索
  -0 : 打印匹配关键字本身,即只打印匹配到的关键字
  -c : 统计匹配到的次数
  -n : 显示行号
  -r : 逐层遍历目录查找
  -A : 显示匹配行及下面多少行
  -B : 显示匹配行及上面多少行
  -C : 显示匹配行上下多少行
  -I : 只列出匹配的文件名
  -L : 列出不匹配的文件名
  -e : 使用正则匹配
  -E : 使用扩展正则匹配
  ^key : 以关键字开头
  key$ : 以关键字结尾
  ^$ : 匹配空行
  --color=auto : 可以将找到的关键词部分加上颜色显示

颜色显示(别名设置)

# 临时设置
alias grep='grep --color'

# 永久设置
1) 全局(针对所有用户生效)
vim /etc/bashrc
在最后一行插入
alias grep='grep --color'
保存退出之后敲 source /etc/bashrc 使文件生效。

eg:

image.png

2、cut *

cut是 截取工具,用于列的截取

语法和选项

语法

 cut 选项   文件名

常见选项

-c : 以字符为单位进行分割,截取
-d : 自定义分隔符,默认为制表符 \t
-f : 与 -d 一起使用,指定截取哪个区域

eg

image.png

练习

用小工具列出当前系统运行级别
1、如何查看系统运行级别

  • 命令 runlevel
  • 文件 /etc/inittab

2、如何过滤运行级别
image.png

3、sort

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

语法和选项

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

4、uniq

uniq 用于去除连续的重复行

语法和选项及用法

常见选项:
-i : 忽略大小写
-c : 统计重复行次数
-d : 只显示重复行

举例说明:
# uniq 2.txt
# uniq -d 2.txt
# uniq -dc 2.txt

5、tee

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

选项及用法

选项:
-a : 双向追加重定向

image.png

6、diff

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

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

语法和选项

语法

diff [选项]  文件1  文件2

常用选项

-b : 不检查空格
-B : 不检查空白行
-i : 不检查大小写
-w : 忽略所有空格
--normal : 正常格式显示(默认)
-c : 上下文格式显示
-u : 合并格式显示

eg:

  • 比较两个普通文件异同,文件准备 ```powershell

    cat file1

    aaaa hello world 222 333 bbb

cat file2

aaa hello 111 222 bbb 333 world

 1) 正常显示<br />![image.png](https://cdn.nlark.com/yuque/0/2020/png/377256/1596530166441-9c2c7917-43a8-4689-9d03-961974e6650d.png#align=left&display=inline&height=439&margin=%5Bobject%20Object%5D&name=image.png&originHeight=439&originWidth=891&size=298770&status=done&style=none&width=891)<br />2)上下文格式显示<br />![image.png](https://cdn.nlark.com/yuque/0/2020/png/377256/1596531033597-f0a1a59b-bcf8-4095-b24d-2a7ef2b335b1.png#align=left&display=inline&height=566&margin=%5Bobject%20Object%5D&name=image.png&originHeight=566&originWidth=899&size=394628&status=done&style=none&width=899)<br />3) 合并格式显示(比较直观,推荐使用)* <br />![image.png](https://cdn.nlark.com/yuque/0/2020/png/377256/1596531213447-8fa79610-4c67-4f69-bd35-0742cf9502d6.png#align=left&display=inline&height=434&margin=%5Bobject%20Object%5D&name=image.png&originHeight=434&originWidth=887&size=192966&status=done&style=none&width=887)

- 比较两个目录不同

![image.png](https://cdn.nlark.com/yuque/0/2020/png/377256/1596531407541-66cc7c68-38da-44e4-b8a2-3378906990f8.png#align=left&display=inline&height=360&margin=%5Bobject%20Object%5D&name=image.png&originHeight=360&originWidth=923&size=206657&status=done&style=none&width=923)<br />**其他小技巧**<br />有时候我们需要以一个文件为标准,去修改其他文件,并且修改的地方比较多时,我们可以通过打补丁的方式完成。<br />![image.png](https://cdn.nlark.com/yuque/0/2020/png/377256/1596532762798-ceaedbed-dbfe-40c5-a5ce-09a867132f11.png#align=left&display=inline&height=337&margin=%5Bobject%20Object%5D&name=image.png&originHeight=337&originWidth=893&size=160768&status=done&style=none&width=893)
<a name="isEnK"></a>
## 7、paste
> paste工具用于合并文件行

```powershell
常用选项
-d : 自定义间隔符,默认是 \t
-s : 串行处理,非并行

eg:
image.png

8、tr

tr用于字符转换,替换和删除;主要用于删除文件中控制字符或进行字符转换

语法和选项

语法

用法1:命令的执行结果交给tr处理,其中string1用于查询,string2用于转换处理。
commands|tr  'string1' 'string2'
用法2:tr处理的内容来自问价,记住要用 "<" 标准输入
tr 'string1'  'string2'  < finename
用法3:匹配string1进行相应操作,如删除操作
tr options 'string1' < filename

常用选项:

-d : 删除 字符串1 中所有输入字符
-s : 删除所有重复出现字符序列,只保留第一个;即将重复出现字符串压缩为一个字符串。

常用匹配字符串

image.png

二、bash的特性

1、命令和文件自动补全

Tab 只能补全 命令和文件

2、常见快捷键

^c   终止前台运行的程序
^z   将前台运行的程序挂起到后台
^d   退出  等价 exit
^l   清屏
^a   光标移动到命令行最前端  
^e   光标移动到命令行的后端
^u   删除光标前所有字符
^w   删除光标
^k   删除光标后所有字符
^r   搜索历史命令

3、常用的通配符 *

* : 匹配 0 或多个任意字符
? : 匹配任意 单个 字符
[list] : 匹配[list]中的任意单个字符
[!list] : 匹配除list中的任意单个字符
{string1,string2,……} : 匹配string1,string2,或更多字符串

4、bash中的引号 *

  • 双引号 “” : 会把引号的内容当成整体来看待,允许通过 $ 符号应用其他变量值。
  • 单引号 ‘’ : 会把引号的内容当成整体来看待,禁止引用其它变量值,shell中特殊符号都视为普通字符。
  • 反撇号 `` : 反撇号he $() 一样,引号或者括号里面的命令会优先执行,如果存在嵌套,反撇号不能用。