awk -f 分隔符 命令_Linux 三剑客实例详解「grep、sed 、awk」

简介

Linux 操作文本的三大利器分别是 grep、sed 、awk,简称三剑客。

大师兄 awk:最擅长取列;二师兄 sed:最擅长取行;三师兄 grep:最擅长过滤。

正则表达式

f1e7e3277de81236fdb95c3e22d12271.png

*** 三位师兄闪亮登场啦 ***

大师兄 -- AWK

  • awk 是对文本进行格式化的工具,适合处理比较复杂的格式处理。
  • 有多个版本: 1、new awk: nawk ;2、gawk, awk
  • awk 命令格式:

awk [options] 'script' file1 file2, ...

awk [options] 'PATTERN {acticon}' file1 file2, ...

格式说明:

  1. pattern部分决定动作语句何时触发及触发事件:BEGIN、END
  2. action 对数据进行处理,放在{}内指明:print、printf
  3. 最常用的是 print,默认以空白字符分隔

$0 代表整行,$1 代表第 1 段,$2 代表第 2 段,以此类推,$NF 代表最后一个字段,多个字段直接用逗号隔开

awk '{print $1, $2}' xxx.log

打印操作支持拼接打印,如:awk '{print "first" $1, $2}' xxx.log

4. options 参数:输入分隔符,默认以空白字符分隔,通过 -F 选项来执行分隔符

awk -F '#' '{print $1,$2}' test

c1ff038bf65b10cfc3bcfd99b7ba427e.png

输出分隔符,默认情况下输出分隔符是空格,使用内置变量 OFS 来设定输出分隔符,需要加上 -v 选项

awk -v OFS="-->" '{print $1,$2}' test

8081105d34c029037c2ac6019852df24.png

5. awk 变量

FS:输入字段分隔符,默认空白字符,一般需要加 -F

OFS:输出字段分隔符,默认是空格,一般需要加 -v

NF:分隔后的字段数量

NR:当前行的行号

6. pattern 模式:模式是条件,符合条件的行, awk 才会进行处理

关系运算模式:awk -F '#' 'NF==5 {print $1}' test

如果行的分段数量为5 的话,进行打印操作,其他的类似,如 NF>2,NF<4,$1==1234 等都是判断条件

576e3667c0f91ecfc6dbd9ec0a37f73b.png

awk -F '#' 'NF>=4 && NF<=5 {print $1}' test

d6e9571daeea7ae9e0c4c3cf7245fe81.png

二师兄 -- sed

  • sed 是一种流编辑器,它一次处理一行内容。处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”,接着用 sed 命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。
  • sed 命令格式:

sed [options]... 'script' inputfile

选项

  1. -n:不输出模式空间内容到屏幕,即不自动打印
  2. -e:多点编辑
  3. -f /PATH/SCRIPT_FILE:从指定文件中读取编辑脚本
  4. -r:支持使用扩展正则表达式
  5. -i:直接编辑文件
  6. -i.bak:备份文件并原处编辑

script 地址定界

  1. 不给地址:对全文进行处理
  2. 单地址:

#:指定的行; $:最后一行

/pattern/:被此处模式所能够匹配到的每一行

编辑命令

  1. d 删除模式空间匹配的行,并立即启用下一轮循环
  2. p 显示符合条件的行,追加到默认输出之后
  3. a []text1 在指定行后面追加文本,支持使用n实现多行追加
  4. i []text 在行前面插入文本
  5. c []text 替换行为单行或多行文本
  6. w /path/somefile 保存模式匹配的行至指定文件
  7. r /path/somefile 读取指定文件的文本至模式空间中匹配到的行后
  8. = 为模式空间中的行打印行号
  9. ! 模式空间中匹配行取反处理
  10. s///:查找替换,支持使用其它分隔符,s@@@,s###

替换标记:

  1. g 行内全局替换
  2. p 显示替换成功的行
  3. w /PATH/TO/SOMEFILE 将替换成功的行保存至文件中

实例说明:

sed -n 2p test 打印第 2 行内容

f3e545197b5558eafd336177f18aff1d.png

sed -n 2,5p test 打印第 2--5 行内容

9b57a40a0b46147877391d72b4343f28.png

sed -i 's/a/v/g' test 将文件中的 a 全部替换为 v 「sed替换格式是:sed -i ‘s/要替换的内容/替换成的内容/g' 文件名」

mac 上执行上述命令会报错 sed: 1: "test": undefined label 'est.txt'
解决方案:增加一个备份的追加名【sed -i '.bak' 's/a/v/g' test】
原因:mac强制要求备份,否则报错
当然可以不使用其他备份名字,只是用'',就可以只保留一份
sed -i '' 's/a/v/g' test

ed4936aa10269c14052953928e025dae.png

三师兄 -- grep

  • grep 强大的文本搜索工具,根据模式搜索文本,并将符合模式的文本行显示出来。
  • gerp 命令格式:

grep 【option】 pattern 【file】

option:

  • -i:忽略字符大小写
  • -n:显示匹配的行号
  • -v:显示没有被匹配的行
  • --color:将匹配的字符以高亮颜色标记出来
  • -c:统计匹配的行数
  • -o:仅显示匹配到的字符串
  • -q:静默模式,不输出任何信息
  • -e:实现多个选项间的逻辑 or 关系
  • -v:反转查找
  • -w:匹配整个单词
  • -A:after ,显示后行
  • -B:before ,显示前行
  • -C:context,显示前后行
  • -E:相当于 egrep,即 grep -E = egrep

实例说明:

grep -i 'b' test 在文件 test 中查找字符 b

626e7b596a4ce2bbcf530892c5f3b6f6.png

grep -q 'abc' test 静默执行。不会输出任何信息,如果命令运行成功返回0,失败则返回非0值。一般用于条件测试

6b4843e88708315d65f8a0ec7afc54f6.png

grep -n 'v' test 查找包含字符 v 的行数

d12271ea7d230c6aa33d4660b9e48ad9.png

grep -nv 'v' test 查找不包含字符 v 的行数

ffa544a26846a9f5c0860e8d3d1acf32.png

grep -n v$ test 查找以 v 结尾的行

447af34f43209255852e94a0587ad537.png

grep -v 'v' test 反向查找

49dfbf7ac0295f831c6d36ca1f674a74.png

grep 'ljl' -A 2 test 输出匹配结果行的后 2 行

907f34eb415a95b29eaf791493163daa.png

grep 'wooow' -B 2 test 输出匹配结果行的前 2 行

dcbc9f7737ac3658abba32bd519d264b.png

grep 'wooow' -C 2 test 输出匹配结果行的前后 2 行

bc20f5764abfbece60ab14ba504ad7fb.png

grep -n 'abc' test1 test2 test3 或 grep -n 'abc' test* 多个文件查找匹配的结果行


(#^.^#)---我是有底线的---(#^.^#)

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值