文本处理命令

grep命令详解

grep命令

grep 指令用于查找内容包含指定的范本样式的文件,如果发现某文件的内容符合所指定的范本样式,预设grep指令会把含有范本样式的那一列显示出来。

语法

grep [option] [] in_put

常用参数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
-v 过滤匹配文本
-i 忽略大小写
-o 显示匹配文本
-n 显示匹配行以及行号
-c 只输出匹配行的计数
-e 查找多个模式
-w或--word-regexp 只显示全字符合的列。
-x或--line-regexp 只显示全列符合的列。
-E 使用扩展正则表达式
-P 兼容perl 正则
-r 在当前目录以及子目录下递归搜索匹配的文本信息
元字符:
.:所有的单个字符。
   *:有字符,长度可以为0。

常用正则表达式参数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
\: 忽略正则表达式中特殊字符的原有含义。
  ^:匹配正则表达式的开始行。
  $: 匹配正则表达式的结束行。
  \<:从匹配正则表达 式的行开始。
  \>:到匹配正则表达式的行结束。
  [ ]:单个字符,如[A]即A符合要求 。
  [ - ]:范围,如[A-Z],即A、B、C一直到Z都符合要求 。
*:匹配前面的字符零次或多次。
+:匹配前面的字符一次或多次。
?:匹配前面的子表达式零次或一次。
{n}:n 是一个非负整数。匹配确定的 n 次。o
{n,}:n 是一个非负整数。至少匹配n 次。
{n,m}:m 和 n 均为非负整数,其中n <= m。最少匹配 n 次且最多匹配 m 次。
x|y: 匹配 x 或 y
[^a-z] :匹配任何不在指定范围内的任意字符
```
## grep 常用示例
1. 过滤空行
` grep -v "^$" filename`
2. 过滤配置文件的注释
` grep -v ^# filename`
3. grep -c 来计算匹配的数量
` grep -c "root" /etc/passwd `
4. 显示行号
` grep -n "root" /etc/passwd `
5. 输出匹配指定模式行的前或者后面N行
(1) 使用-B参数输出匹配行的前4行
    grep -B 4 "root" /etc/passwd
(2) 使用-A参数输出匹配行的后4行
    grep -A 4 "root" /etc/passwd  
(3) 使用-C参数输出匹配行的前后4行  
    grep -C 4 "root" /etc/passwd  
1
6. 获取网卡信息
(1) 获取eth0的信息
    ifconfig | grep "eth0" –A 4
(2) 获取开放的网卡
    ifconfig | grep  -B 2 UP
(3) 过滤掉ipv6
    ifconfig | grep -v inet6
(4) 获取ip信息
    ifconfig | grep -ioE "inet\ [0-9].*?"
1
7. 扩展正则表达式的使用
获取ip
    ifconfig | grep -ioP "\d{1,3}\.\d{1,3}\.\d{1,3}\.[1-2]\d{0,2}"
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# sed命令详解
sed是一种流编辑器,处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末尾。
## 处理流程
>1.读入新的一行内容到缓存空间;
2.从指定的操作指令中取出第一条指令,判断是否匹配pattern;
3.如果不匹配,则忽略后续的编辑命令,回到第2步继续取出下一条指令;
4.如果匹配,则针对缓存的行执行后续的编辑命令;完成后,回到第2步继续取出下一条指令;
5.当所有指令都应用之后,输出缓存行的内容;回到第1步继续读入下一行内容;
6.当所有行都处理完之后,结束;
## 语法
### 格式
sed [options] 'command' file(s)
sed [options] -f scriptfile file(s) 执行sed脚本
1
### 选项

-e command, –expression=command
  允许多台编辑。
  -h, –help
  打印帮助,并显示bug列表的地址。
  -n, –quiet, –silent
  取消默认输出。
  -f, –filer=script-file
  引导sed脚本文件名。

1
### 常用参数

a   ∶新增, a 的后面可以接字串,而这些字串会在新的一行出现
i   ∶插入, i 的后面可以接字串,而这些字串会在新的一行出现
c   ∶取代, c 的后面可以接字串,这些字串可以取代 n1,n2 之间的行!
d   ∶删除
p   ∶打印,
s   :替换  sed "s/匹配内容/替换内容/g" g代表全部
!   :表示后面的命令对所有没有被选定的行发生作用。
=   :打印当前行号码。
#   :把注释扩展到下一个换行符以前。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
### 常用
1. 将文章进行左对齐
`sed 's/^[ \t]*//' File`
2. 将文本中每行结尾的空白字符、制表符删除
`sed 's/[ \t]*$//' File`
3. 插入
`sed '1i test' File` 首行插入
`sed '$a test' File` 末行插入
4. 删除文本中的所有空行
`sed '/^$/d' File`
5. 删除所有偶数行
`sed 'n;d' File`
6. 删除文件最后一行:
`sed '$d' File`
7. 删除注释行
`sed '/^#/d' File`
8. 删除所有不以test开头的行
`sed '/^test/d' File`
9. 删除2到10行
`sed '2,10d' File`
## sed 高级应用
在sed处理文件的时候,每一行都被保存在一个叫模式空间的临时缓冲区中,除非行被删除或者输出被取消,否则所有被处理的行都将 打印在屏幕上。接着模式空间被清空,并存入新的一行等待处理。保持空间用于保存模式空间的内容,模式空间的内容可以复制到保持空间,同样地保持空间的内容可以复制回模式空间
### n命令
n命令简单来说就是提前读取下一行,覆盖模型空间前一行(并没有删除,因此依然打印至标准输出),如果命令未执行成功(并非跳过:前端条件不匹配),则放弃之后的任何命令,并对新读取的内容,重头执行sed。
### N命令
N命令简单来说就是追加下一行到模式空间,同时将两行看做一行,但是两行之间依然含有\n换行符,如果命令未执行成功,则放弃之后任何命令,并对新读取的内容,重头执行sed。
### d命令
d命令是删除当前模式空间内容
### D命令
D命令是删除当前模式空间开端至\n的内容,放弃之后的命令,但是对剩余模式空间重新执行sed。
### h命令,H命令,g命令,G命令
h命令是将当前模式空间中内容覆盖至保持空间,H命令是将当前模式空间中的内容追加至保持空间
g命令是将当前保持空间中内容覆盖至模式空间,G命令是将当前保持空间中的内容追加至模式空间
示例:
将文本中的内容倒序显示,实现tac的功能
    sed '1!G;h;$!d' File

```

awk命令详解