一:基本

  • 字符处理主要是文本的搜索和处理。
  • 搜索也主要使用到了 管道

 

二: grep 搜索文本

  - 基本语法 (可以在文本中使用正则进行搜索)

- grep [-incv] '文本' 文件

      - i 不区分大小写

      - c 匹配行数

      - n 输出匹配行数

      - v 反向匹配

 

  - 正则使用

    - grep '^[123]' index.txt  (搜索在开头为123的行)

 

三: sort 排序

  - 基本语法

    - sort [-ntkr] 文件名

      - n 数字排序

      - t 指定分隔符

      - k 指定第几列

      - r 反向排序

 

  - 指定排序

指定排序方式

    - 比如这里,我新建了一个 sort.txt 

[mttyk]$ cat sort.txt
b:1-3
a:2-2
f:4-1
h:8-9
d:3-6
h:8-9
g:6-7

默认第一个字符正序

[mttyk]$ sort sort.txt
a:2-2
b:1-3
d:3-6
f:4-1
g:6-7
h:8-9
h:8-9

    - 如果想使用第二例的数字来进行排序的话

  • [mttyk]$ sort -t ":" -k 2 sort.txt
    b:1-3
    a:2-2
    d:3-6
    f:4-1
    g:6-7
    h:8-9
    h:8-9
    -t 等于切割了两组
    1组 切割符 第二组
    b : 1-3
    a : 2-2
    ......

 

四: uniq 删除重复内容

  - 基本语法

    - uniq [-ic] 文件

      - i 忽略大小写

      -c 显示重复行数

  - 注意

uniq 语法应该是和 sort 一起使用的,因为不连续的重复数据,uniq 是无法删除的

    - 所以需要 sort 排序后删除/统计

文件
    h:8-9
    d:3-6
    h:8-9

直接 uniq 删除重复
    [mttyk]$ uniq sort.txt
    h:8-9
    d:3-6
    h:8-9
无法删除

排序后 uniq 删除重复
    [mttyk]$ sort sort.txt | uniq
    d:3-6
    h:8-9

 

五: tr (文本转换/删除)

   - tr 只能在管道中处理字符,源文件并不能修改

  - 基本语法 (支持正则)

    - 删除指定字符  tr -d "[1-9]"

    - 转换指定字符 tr "[a-z]" "[A-Z]"

只能替换多少个字符

 

六:sed (文本处理) ( -i 可改变源文件)

行  的 文本处理工具

 

- 基本语法

- sed [options] 'commend' file

 

- 删除操作 (/d)

    - 删除指定行    sed '1d' index.txt (删除 index.txt 文件下的第1行)

    - 删除指定区间 sed '1,2d' index.txt (删除 index.txt 文件下的第1-2行)

    - 删除最后一行 sed '$d' index.txt (删除 index.txt 文件下的最后一行)

    - 删除空行       sed '/^$/d' index.txt (删除 index.txt 文件下的空行)

 

- 查找替换 (s/)

    - 部分替换 sed 's/L/l/1' index.txt (替换 index.txt 文件下的L为l) (只替换一行中的第一个)

    - 全部替换 sed 's/L/l/g' index.txt (替换 index.txt 文件下的L为l) (一行不管有多少个,全部替换)

 

- 字符替换 (y/)

    - 批量替换 sed 'y/abcd/ABCD/' index.txt (替换 index.txt 文件下的a为A, b为B, c为C,d为D) 

 

- 文本插入 (i 匹配行后插入) (a 匹配行前插入)

    - 指定行插入 sed '2 i insert' index.txt  (在 index.txt 文件 第2行 插入文本) 

 

七:awk (文本处理)

  - 基于 列 的文本处理工具

- 基本语法

    - -F 指定分隔符

 

 - 基本操作

    - 查看文本域数量

      - awk '{print NF}' index.txt  (查看 index.txt 文件的切割域) (内部变量 NF 实现)

- 求和

      - awk 'BEGIN{total=0}{total+=$1}END{print total}' index.txt

      - awk 'BEGIN{total=0;num=0}{num+=$1;total+=1}END{print total/num}' index.txt