Linux三剑客

Linux三剑客之grep

grep是linux三剑客之一,它是文本过滤器(根据文本内容过滤文件)。

image

命令介绍

Ⅰ、语法格式: grep [参数] [匹配规则] [操作对象]

Ⅱ、参数

以下以/etc/fsta文件内容为例,

image

  • -n : 显示筛选出的内容在文件内的行号
    image

  • -A : 显示匹配行及其后n行
    image

  • -B : 显示匹配行及其前n行
    image

  • C : 显示匹配行及其前后n行
    image

  • -c : 返回符合匹配内容的列数
    image

  • -o : 只显示匹配的内容文本
    image

  • -v : 匹配内容取反
    image

  • -q : 静默输出
    image

  • -i : 忽略匹配文本大小写
    image

  • -l : 匹配成功,返回文件名
    image

  • -R | r : 递归匹配(针对目录)
    image

  • -E : 扩展正则匹配(等价于egrep)
    image

练习

1、在/etc/passwd文件中,匹配以ftp开头的行

[root@localhost ~]# grep '^ftp' /etc/passwd

2、 在/etc/passwd文件中,匹配以bash结尾的行

[root@localhost ~]# grep 'bash$' /etc/passwd

3、匹配本机中有哪些ip

[root@localhost ~]# ip a | grep -oE '([0-9]{1,3}\.){3}[0-9]{1,3}'

4、在/etc/fstab文件中,匹配无 # 开头的行

[root@localhost ~]# grep -v '^#.*' /etc/fstab

5、在nginx.conf文件中,匹配除#开头的行和空行

[root@localhost ~]# grep -vE '^ *#|^$' /etc/nginx/nginx.coonf

Linux三剑客之sed

sed是linux三剑客之一,sed 命令是利用脚本来处理文本文件。Sed 主要用来自动编辑一个或多个文件、简化对文件的反复操作、编写转换程序等。

image

命令介绍

Ⅰ、命令格式:sed [参数] [动作] [操作对象]

Ⅱ、参数 (以employee.txt文件为例,文件内容如下:

image

  • -e : 允许多项编辑
    image

  • -n : 仅显示处理后的结果
    image

  • -i : 同步修改操作对象文件
    image

  • -r : 支持扩展正则

  • -f : 指定sed匹配规则脚本文件

Ⅲ、动作参数

  • a : 在指定或匹配行的下一行插入a后接的字符串
    image

  • c : c后接字符串,替换指定或匹配的行内容
    image

  • d : 删除指定或匹配的行
    image

  • i : i后接字符串,在指定或匹配行的上一行插入
    image

  • p : 打印匹配的数据,通常于sed -n 配合使用
    image

  • s : 与正则配合使用,替换匹配的字符(只替换第一个匹配的)
    image

  • g : 配合s使用全部替换
    image

  • r : 读取脚本文件

  • w : 将操作对象文件中指定内容写入w后接的文件
    image

  • y : y前的数字表示处理的行数,替换匹配的单个字符
    image

练习

1、删除/etc/passwd所有包含root的行,其他行输出

[root@localhost ~]# sed '/root/d' /etc/passwd

2、修改/etc/passwd中root为ROOT

[root@localhost ~]# sed 's/root/ROOT/g' /etc/passwd

3、将/etc/nginx/nginx.conf所有行前加 '# '

[root@localhost ~]# sed '/.*/# &/' /etc/nginx/nginx.conf

注:此处&代表前面匹配的内容

Linux三剑客之awk

AWK 是一种处理文本文件的语言,是一个强大的文本分析工具。

image

之所以叫 AWK 是因为其取了三位创始人 Alfred Aho,Peter Weinberger, 和 Brian Kernighan 的 Family Name 的首字符。

awk命令介绍

Ⅰ. 命令格式:awk [参数] [处理规则] [操作对象]

Ⅱ. 参数

以下参数实例操作文件以/etc/passwd为例

  • -F : 指定文本分隔符(默认是空格为分隔符)
    image

Ⅲ. 内建变量

  • $0 : 代表当前整行
    image

  • $n : 代表第n列
    image

  • NF :记录根据分隔符切分后的列数
    image

  • NR :记录行数
    image

  • FS :指定文本内容分隔符
    image

  • OFS :指定打印结果的分隔符(默认空格)
    image

Ⅳ. 运算符

  • 算数运算 +、-、*、/、%、+=、-=、*=、/= 等
  • 关系运算 ==、>、<、>=、<=、!=
  • 逻辑运算 &&、||、!
  • 匹配正则表达式 ~、!~
  • 成员运算 in

例子(以以下文件内容为例)

image

1、过滤第一列大于2的行

[root@localhost ~]$ awk '$1>2 {print $0}' 1.txt

image

2、过滤第一列等于2的行

[root@localhost ~]$ awk '$1==2 {print $0}' 1.txt

image

3、过滤第一列大于2并且第二列等于Are的行

[root@localhost ~]$ awk '$1>2 && $2=="Are"  {print $0}' 1.txt

image

4、输出第二列包含th并且打印第二列与第四列

[root@localhost ~]$ awk '$2 ~ /th/ {print $2,$4}' 1.txt

image

Ⅴ. awk函数

格式化输出 printf

[root@localhost ~]$ awk -F: '{printf "|%-4s|%-15s|\n",NR,$1}' /etc/passwd

image

查找字符串index

[root@localhost ~]$ awk '{print index($0,"games")?"yes":"no"}' /etc/passwd

image

Ⅵ. 条件语句与循环

1、只打印偶数行

[root@localhost ~]$ awk '{if(NR%2==0) {print NR,$0}}' /etc/passwd

image

2、每行重复打印3次

[root@localhost ~]$ awk '{for(i=0;i<3;i++){print $0}}' /etc/fstab

image

Ⅶ. awk生命周期

awk同grep、sed一样,都是读一行处理一行,直到处理结束。

image

awk工作流程:

  1. 执行BEGIN块内的内容
  2. 读取一行数据
  3. 根据指定的分隔符划分域,$0表示一行内容,$n表示第n个域或列
  4. 通过给定的规则处理文本
  5. 循环读取每行内容处理直到结束
  6. 执行END块内的内容,输出最终结果
posted @ 2021-12-20 20:37  它叫鸮  阅读(511)  评论(0)    收藏  举报