Linux的文本处理三剑客
> grep:文本过滤(模式:pattern)工具
> grep, egrep, fgrep(不支持正则表达式搜索)
> sed:stream editor,文本编辑工具
> awk:Linux上的实现gawk,文本报告生成器
- ### grep
作用是根据“pattern”对目标文件进行搜索,并且显示匹配到的行
这就是一个简单的脚本脚本的用途是显示hello
grep分三种
> 1:fgerp不支持正则表达式,但是搜索速度极快
> 2:gerp支持正则表达式
> 3:egerp支持扩展的正则表达式 有
用法:grep [OPTIONS] PATTERN [FILE...]
gerp常用的选项
-color=auto: 对匹配到的文本着色显示
-v: 显示不被pattern匹配到的行
-i: 忽略字符大小写
-n:显示匹配的行号
-c: 统计匹配的行数
-o: 仅显示匹配到的字符串
-q: 静默模式,不输出任何信息
-A #: after, 后#行
-B #: before, 前#行
-C #:context, 前后各#行
-e:实现多个选项间的逻辑or关系
-w:匹配整个单词
-E:使用ERE
-F:相当于fgrep,不支持正则表达式
正则表达式的元字符有
```
. 匹配任意单个字符
[] 匹配指定范围内的任意单个字符
[^] 匹配指定范围外的任意单个字符
[:alnum:] 字母和数字
[:alpha:] 代表任何英文大小写字符,亦即 A-Z, a-z
[:lower:] 小写字母 [:upper:] 大写字母
[:blank:] 空白字符(空格和制表符)
[:space:] 水平和垂直的空白字符(比[:blank:]包含的范围广)
[:cntrl:] 不可打印的控制字符(退格、删除、警铃...)
[:digit:] 十进制数字 [:xdigit:]十六进制数字
[:graph:] 可打印的非空白字符
[:print:] 可打印字符
[:punct:] 标点符号
```
匹配次数有
```
* 匹配前面的字符任意次,包括0次
贪婪模式:尽可能长的匹配
.* 任意长度的任意字符
\? 匹配其前面的字符0或1次
\+ 匹配其前面的字符至少1次
\{n\} 匹配前面的字符n次
\{m,n\} 匹配前面的字符至少m次,至多n次
\{,n\} 匹配前面的字符至多n次
\{n,\} 匹配前面的字符至少n次
```
位置锚定的字符有
```
位置锚定:定位出现的位置
^ 行首锚定,用于模式的最左侧
$ 行尾锚定,用于模式的最右侧
^PATTERN$ 用于模式匹配整行
^$ 空行
^[[:space:]]*$ 空白行
\< 或 \b 词首锚定,用于单词模式的左侧
\> 或 \b 词尾锚定;用于单词模式的右侧
\<PATTERN\> 匹配整个单词
```
分组
```
分组:\(\) 将一个或多个字符捆绑在一起,当作一个整体进行处理,如:\(root\)\+
分组括号中的模式匹配到的内容会被正则表达式引擎记录于内部的变量中,这些变量的命名方式为: \1, \2, \3, ...
```
- #### 扩展的正则表达式和基本的正则表达式用法基本一样,但比基本的正则表达式方便,用法是在正则表达式的基础上去掉转义符
shell脚本基础
程序的编程风格分为两类
> 1:过程式:以指令为中心,数据服务于数据
> 2:对象式:以数据为中心,指令服务于数据
高级语言大致分为两种
> 编译:高级语言-->编译器-->目标代码
java,C#
> 解释:高级语言-->解释器-->机器代码
shell, perl, python
- ### shell脚本:
包含一些命令或声明,并符合一定格式的文本文件
> 格式要求:在shell脚本中
> 首行需要写shebang机制
> shebang写做#!,#!的作用是告诉cpu此程序是什么机制
示例:#!的写法
> #!/bin/bash
> #!/usr/bin/python
> #!/usr/bin/perl
> shell脚本的用途有:
> 自动化常用命令
> 执行系统管理和故障排除
> 创建简单的应用程序
> 处理文本或文件
简单的脚本可以由简单的命令组合而成。
脚本的基本结构
> #!SHEBANG
> CONFIGURATION_VARIABLES
> FUNCTION_DEFINITIONS
> MAIN_CODE
示例
```
#!/bin/bash
#---------------------------
# my first script
# owner :zhangxiao
#---------------------------
echo "hello"
```