Linux三剑客——grep/awk/sed

grep

基于正则表达式查找满足条件的行

内容检索

  • 获取行 grep pattern file
  • 获取内容 grep -o pattern file
  • 获取上下文 grep -A -B -C pattern file

文件检索

  • 递归搜索 grep pattern -r dir/
  • 展示匹配文件名 grep -H lll /tmp/l
  • 只展示匹配文件名 grep -l lll /tmp/l

范围约束

  • 忽略大小写 grep -i pattern file
  • 不展示匹配的行 grep -v pattern file
  • 使用扩展正则表达式 grep -E pattern file
  • 文件范围和目录范围约束 grep lll -r /tmp/demo/ --include “ll*”

进程检索

进程过滤场景比较特殊,需要注意;grep本身会开启新进程,所以需要单独过滤掉grep进程
在这里插入图片描述

awk

根据定位到的数据行处理其中的分段

基本语法

  • awk是Linux下的一个命令,同时也是一种语言解析引擎
  • awk具备完整的编程特性,比如执行命令,网络请求等
  • 语法 awk ‘pattern{action}’

上下文变量

  • 开始BEGIN 结束 END
  • 行数
  • 字段与字段数 $1 $ 2…$NF NF
  • 整行$0
  • 字段分隔符FS
  • 输出数据的字段分隔符OFS
  • 记录分隔符 RS
  • 输出字段的行分隔符ORS

字段变量用法

  • -F 参数指定字段分隔符,可以用|指定多个- 多分隔符 -F ‘<|>’
  • BEGIN{FS=“_”}也可以表示分隔符
  • $0 代表当前记录
  • $1 代表第一个字段
  • $N 代表第N个字段
  • $NF 代表最后一个字段
  • $(NF-1) 代表倒数第二个字段

pattern 表达式

  • 正则匹配 $1~/pattern/ /pattern/
  • 比较表达式 $2>2 $1==“b”
awk pattern 匹配表达式案例
  • 开始和结束 awk ‘BEGIN{}END{}’
  • 正则匹配
    整行匹配 awk ‘/Running/’
    字段匹配 awk ‘$2~/xxx/’
  • 行数表达式
    取第二行 awk ‘NR ==2’
    去掉第一行 awk ‘NR>1’
  • 区间选择
    awk ‘/aa/,/bb/’
    awk ‘/l/,NR==2’

action行为表达式{action}

  • 打印 {print $0}{print $2}
  • 赋值 {$1=“abc”}
  • 处理函数
  • 原始内容 $0
  • 更新后内容 { l = l= l=l;print $0}

sed

stream editor 定位并修改数据

基本语法与常用参数

  • 语法结构 sed [addr]X[options]
  • -e 表达式
  • sed -n ‘2p’ 打印第二行
  • sed ‘s#hello#world#’ 修改
  • -i 直接修改源文件
  • -E 扩展表达式
  • -debug 调试

sed pattern 表达式

  • 行数与行数范围 20 30,35
  • 正则匹配 /pattern/
  • 区间匹配 //,//

sed action 表达式

  • p 打印,通常结合-n参数:sed -n’2p’
  • s 查找替换:s/REGEXP/REPLACEMENT/[FLAGS]
  • d 删除,删除前两行 sed ‘1,2d’
  • a 追加
  • c 改变
  • i 插入内容到匹配行之前
  • e 执行命令
  • 分组匹配与字段提取:sed ‘s#([0-9])|([a-z])#\1\2#’

行数操作

  • 打印特定行 sed -n 2p
  • 删除最后一行 sed $d

s表达式

  • s表示替换
  • s后面的追加字符可以为任意字符
  • g表示全局匹配
  • &表示匹配内容

你可能感兴趣的:(04,LINUX/BASH,linux,正则表达式,服务器)