grep,sed,awk简介

grep

grep [-acinv] [--color=auto] '搜寻字符串' filename
	-a: 将 binary 文件以 text 文件方式搜寻数据
	-c: 计算找到 '搜寻字符串' 的数据
	-i: 忽略大小写的不同,所以大小写视为相同
	-o : only,只显示匹配的内容,其他不作输出
	-n: 顺便输出行号
	-v: 反向选择,亦即显示出没有 '搜寻字符串' 的那一行
	--color=auto: 将查找到的 '搜寻字符串' 加上颜色,高亮显示

grep nginx /etc/passwd

参考文档
shell grep 的结果只取第一行
Linux下使用grep,tail 查看查找日志
linux 下利用ls grep 和正则表达式实现目录和文件的分开显示
grep 文本过滤
《鸟哥的Linux私房菜-基础学习篇 第四版》 10.6.1 撷取命令: cut, grep
《鸟哥的Linux私房菜-基础学习篇 第四版》 11.2.2 grep 的一些进阶选项

awk

awk——按列处理数据

  • -F :分隔符
    awk 通常运作的模式是这样的:
awk '条件类型 1{动作 1} 条件类型 2{动作 2} ...' filename

awk 后面接两个单引号并加上大括号 {} 来设定想要对数据进行的处理动作。 awk 可以处理后续接的文件,也可以读取来自前个指令的 standard output 。 但如前面说的, awk 主要是处理『每一行的字段内的数据』,而默认的『字段的分隔符为 “空格键” 或 “[tab]键” 』 !

在 awk 的括号内, 每一行的每个字段都是有变量名称的,那就是 $1, $2… 等变量名称。以上面的例子来说, dmtsai 是 $1 ,因为他是第一栏嘛!至于 192.168.1.100是第三栏, 所以他就是 $3 啦!后面以此类推~呵呵!还有个变数喔!那就是 $0 , $0 代表『一整列资料』的意思~以上面的例子来说,第一行的 $0 代表的就是『 dmtsai … 』那一行啊!

# last -n 5: 使用last指令取出登录用户,只取前5行
# awk '{print $1 "\t" $3}': 以空格(默认)为分隔符,打印(print)出第一列($1)和第三列($3)的数据,
# 并以"\t"为分隔符进行显示
last -n 5 | awk '{print $1 "\t" $3}'

awk 是『 以行为一次处理的单位』, 而『 以字段为最小的处理单位』。

变量名称代表意义
NFNum Field,每一行 ( 0 ) 拥 有 的 字 段 总 数 ; N F 表 示 字 段 总 数 , 0) 拥有的字段总数;NF表示字段总数, 0)NFNF表示最后一个字段,$(NF-1)表示倒数第二个字段
NRNum Row,目前 awk 所处理的是『第几行』数据
FSField Split,字段分隔符,默认是空格或制表符,也可使用-F参数指定
RSRow Split,行分隔符,用于分割每一行,默认是换行符。
OFSOutput Field Split,输出字段的分隔符,用于打印时分隔字段,默认为空格
ORSOutput Row Split,输出记录的分隔符,用于打印时分隔记录,默认为换行符。
OFMT数字输出的格式,默认为%.6g
# last -n 5: 使用last指令取出登录用户,只取前5行
# awk '{print $1 "\t lines: " NR "\t columns: " NF}': 以空格(默认)为分隔符,拆分前面命令的输出,
# 并以\t为分隔符,打印出对应变量的数据
# 并以"\t"为分隔符进行显示
last -n 5| awk '{print $1 "\t lines: " NR "\t columns: " NF}'

awk 的逻辑运算字符

运算单元代表意义
>大于
<小于
==等于
>=大于等于
<=小于等于
!=不等于
# {FS=":"}, 以:为分隔符进行分割,从第二行开始生效
cat /etc/passwd | awk '{FS=":"} $3 < 10 {print $1 "\t " $3}'

# BEGIN {FS=":"}, 以:为分隔符进行分割,从第一行开始生效,BEGIN表示预设变量
cat /etc/passwd | awk 'BEGIN {FS=":"} $3 < 10 {print $1 "\t " $3}'

函数(后面自己补充)

条件(后面自己补充)

if语句

awk提供了if结构,用于编写复杂的条件。

# 以":"为分隔符,查找demo.txt(/etc/passwd文件的备份)文件中第一列大于m的字段并输出
awk -F ':' '{if ($1 > "m") print $1}' demo.txt

if结构还可以指定else部分。

awk -F ':' '{if ($1 > "m") print $1; else print "---"}' demo.txt

参考文档

Linux三剑客之awk命令
awk 入门教程
AWK程序设计语言

sed

sed [-nefr] [动作]

选项与参数:

  • -n :使用安静(silent)模式。在一般 sed 的用法中,所有来自 STDIN 的数据一般都会被列出到屏幕上。但如果加上 -n 参数后, 则只有经过 sed 特殊处理的那一行(或者动作)才会被列出来。
  • -e :直接在指令列模式上进行 sed 的动作编辑;
  • -f :直接将 sed 的动作写在一个文件内, -f filename 则可以执行 filename 内的 sed 动作;
  • -r : sed 的动作支持的是延伸型正规表示法的语法。 (预设是基础正规表示法语法)
  • -i :直接修改读取的文件内容,而不是由屏幕输出。

动作说明: [n1[,n2]]function

  • n1, n2 :不见得会存在,一般代表『 选择进行动作的行数』, 举例来说,如果我的动作是需要在 10 到 20 行之间进行的,
    则『10,20[动作行为] 』

function 有底下这些咚咚:

  • a :新增, a 的后面可以接字符串,而这些字符串会在新的一行出现(目前的下一行)~
  • c :取代, c 的后面可以接字符串,
  • 这些字符串可以取代 n1,n2 之间的行!
  • d : 删除,因为是删除啊,所以 d 后面通常不接任何咚咚;
  • i :插入, i的后面可以接字符串,而这些字符串会在新的一行出现(目前的上一行);
  • p :打印,即将某个选择的数据打印。通常 p 会与参数 sed -n
    一起运行
    s :取代,可以直接进行取代的工作哩!通常这个 s 的动作可以搭配正规表示法! 例如 1,20s/old/new/g 就是啦!

以行为单位的新增/删除功能(后续补充)

以行为单位的取代与显示功能

nl /etc/passwd | sed '2,5c No 2-5 number'	# 取代 nl /etc/passwd 命令输出结果的 2-5 行为 'No 2-5 number'

nl /etc/passwd | sed '5,7p'					# 打印 nl /etc/passwd 命令的输出,其中 5-7 的内容会重复输出
nl /etc/passwd | sed -n '5,7p'				# 使用安静模式打印 nl /etc/passwd 命令的输出,仅打印 5-7 行的内容

部分数据的搜寻并取代的功能

sed ‘s/要被取代的字符串/新的字符串/g’——sed工具替换的标准格式

# 替换 ifconfig wlp2s0 | grep 'netmask' 命令的输出结果中 'inet ' 部分内容为 ''
# 其中 '^.*inet '为进行匹配的正则表达式
ifconfig wlp2s0 | grep 'netmask' | sed 's/^.*inet //g'	

# 替换 ifconfig wlp2s0 | grep 'netmask' 命令的输出结果中 'inet ' 部分内容为 '', 
# '  netmask 255.255.255.0  broadcast 192.168.0.255' 部分内容为'',
# 其中 '^.*inet ', ' *netmask.*$'为进行匹配的正则表达式
ifconfig wlp2s0 | grep 'netmask' | sed 's/^.*inet //g' | sed 's/ *netmask.*$//g'

‘s/’中的“ / ”可以用#,%等代替 方便sed ”路径“类字符串

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值