三剑客-grep-awk-sed
三剑客-grep-awk-sed
grep
格式:
grep 参数 过滤文件内容 文件名称
cat file|grep '过滤的内容'
参数: -v 取反
-E 支持扩展正则 | 或者 egrep ‘$|#’
-n 显示过滤内容的行号
-o 查看匹配过滤过程
例:
[root@oldboyedu ~]# grep root passwd
root:x:0:0:root:/root:/bin/bash
[root@oldboyedu ~]# grep root passwd -o
root
root
root
awk
awk 过滤内容和统计数据
格式:
awk '/匹配模式/{动作}' file
cat file|awk '模式{动作}'
参数:
awk中 动作的逗号 表示空格
awk 内置变量
$1 $2 过滤列
NR 过滤行号
, 即空格
NF 最后一列的列号
-F 指定分隔符
例:
只有模式没有动作 默认输出模式匹配到的内容
[root@oldboyedu ~]# awk '/root/' passwd
root:x:0:0:root:/root:/bin/bash
[root@oldboyedu ~]# awk '/root/,/adm/' passwd #过滤出从root到adm的行
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
[root@oldboyedu ~]# awk 'NR==1' passwd #过滤行号等于1的行
root:x:0:0:root:/root:/bin/bash
[root@oldboyedu ~]# awk -F: '$3==0' passwd #-F指定分隔符是冒号: $3是第三列 以:为分隔符过滤出第三列等于0的行
root:x:0:0:root:/root:/bin/bash
[root@oldboyedu ~]# awk -F: '$3>0' passwd # 以:为分隔符过滤出第三列等于0的行
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin #第三列数值为用户的uid号
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
模式+动作 #过滤出root到adm的行中的第一列信息
[root@oldboyedu ~]# awk -F: '/root/,/adm/{print $1}' passwd
root
bin
daemon
adm
输出行号 #过滤行号,输出第一列信息--→行号
[root@oldboyedu ~]# awk -F: '{print NR,$0}' passwd
1 root:x:0:0:root:/root:/bin/bash
2 bin:x:1:1:bin:/bin:/sbin/nologin
3 daemon:x:2:2:daemon:/sbin:/sbin/nologin
4 adm:x:3:4:adm:/var/adm:/sbin/nologin
5 lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
wc 统计数量
-l 统计行号
-L 统计文件中最长的行的长度
[root@oldboyedu ~]# awk -F: ' $3>0 && $3<1000' /etc/passwd|wc -l
22 #过滤uid大于3和小于1000的行,wc -l 进行统计,由此可过滤出系统中的虚拟用户
[root@oldboyedu ~]# awk -F: '$3==0' /etc/passwd
root:x:0:0:root:/root:/bin/bash #过滤uid等于0的行
[root@oldboyedu ~]# awk -F: '$3==0' /etc/passwd|wc -l
1 #过滤uid等于0的行 wc -l 进行统计
[root@oldboyedu ~]# awk -F: '$3>=1000' /etc/passwd|wc -l
3
sed
sed 取行 过滤字符串 替换
格式:
sed '/过滤字符串/' file
cat file|sed '/过滤字符串/'
参数:
-n 取消默认输出
-i 修改源文件
sed执行过程:
一行一行的处理
如果对当前的行 没有动作 默认输出到屏幕
sed 增 删 改 查
例:
sed 之 查内容
按照字符串匹配
[root@oldboyedu ~]# sed -n '/root/p' passwd
root:x:0:0:root:/root:/bin/bash
[root@oldboyedu ~]# sed -n '/^root/p' passwd
root:x:0:0:root:/root:/bin/bash
[root@oldboyedu ~]# sed -n '/^ro/p' passwd
root:x:0:0:root:/root:/bin/bash
[root@oldboyedu ~]# sed -n '/sh$/p' passwd
root:x:0:0:root:/root:/bin/bash
[root@oldboyedu ~]# sed -n '/root/,/adm/p' passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
[root@oldboyedu ~]# sed -n '3p' passwd
daemon:x:2:2:daemon:/sbin:/sbin/nologin
[root@oldboyedu ~]# sed -n '2p' passwd
bin:x:1:1:bin:/bin:/sbin/nologin
[root@oldboyedu ~]# sed -n '1p' passwd
root:x:0:0:root:/root:/bin/bash
[root@oldboyedu ~]# sed -n '1,3p' passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
[root@oldboyedu ~]# sed -n '$p' passwd # 最后一列
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sed之增加内容
a 在n行后面追加新的内容
[root@oldboyedu ~]# cat test.txt
lidao 2
alex 2
oldboy 3
test 1
[root@oldboyedu ~]# sed '2a oldboy111' test.txt
lidao 2
alex 2
oldboy111
oldboy 3
test 1
i 在当前行插入新的内容
[root@oldboyedu ~]# sed '2i oldboy111' test.txt
lidao 2
oldboy111
alex 2
oldboy 3
test 1
c 替换当前整行的内容
[root@oldboyedu ~]# sed '2c oldboy111' test.txt
lidao 2
oldboy111
oldboy 3
test 1
[root@oldboyedu ~]# sed -i '7c SELINUX=disabled' /etc/selinux/config
w 保存当前的内容至文件 没啥用
[root@oldboyedu ~]# sed '1,3w newfile.txt' test.txt
lidao 2
alex 2
oldboy 3
test 1
sed之删除
格式:
sed '3d' file
[root@oldboyedu ~]# sed '3d' test.txt
lidao 2
alex 2
test 1
[root@oldboyedu ~]# sed '1,3d' test.txt
test 1
[root@oldboyedu ~]# sed '/root/d' passwd
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sed替换
sed 's#替换谁#替换成什么#g'
sed 's///g'
sed 's@@@g'
s 替换标志
g 全局替换
[root@oldboyedu ~]# sed 's#root#oldboy#g' passwd
oldboy:x:0:0:oldboy:/oldboy:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
oldboy:x:oldboy:var/var:sbin/login
[root@oldboyedu ~]# sed 's#200#201#g' /etc/sysconfig/network-scripts/ifcfg-eth0
TYPE=Ethernet
BOOTPROTO=none
NAME=eth0
DEVICE=eth0
ONBOOT=yes
IPADDR=10.0.0.201
PREFIX=24
GATEWAY=10.0.0.254
[root@oldboyedu ~]# sed 's#[:/0-9x]# #g' /etc/passwd|xargs -n1|sort |uniq -c|sort -rn|head
25 sbin
19 nologin
8 bin
7 var
4 root
4 oldboy
4 bash
3 sync
3 spool
3 shutdown
[root@oldboyedu ~]# sed 's#[:/0-9]# #g' /etc/passwd|xargs -n1|awk '{count[$1]++}END{for(i in count) print i,count[i]}'|awk '{print $2,$1}'|sort -rn|head|grep -v x
25 sbin
19 nologin
8 bin
7 var
4 root
4 oldboy
4 bash
3 sync
3 spool
三剑客-grep-awk-sed的更多相关文章
- Linux三剑客-grep || awk || sed
grep是一个强大的文本搜索工具 命令格式: grep [option] pattren file -a 将二进制文档以文本方式处理 -c 计算找到的符合行的次数 -i 忽略大小写 -n 顺便 ...
- 【linux系统】命令学习(五)linux三剑客 grep \ awk \ sed
grep----基于正则表达式查找满足条件的行 1.内容检索 获取行 grep pattern file 获取内容 grep -o pattern file 获取上下文grep -A -B -C pa ...
- linux三剑客grep,sed,awk
grep 官方帮助文档 Usage: grep [OPTION]... PATTERN [FILE]... Search for PATTERN in each FILE or standard in ...
- Linux三剑客grep、sed、awk
grep grep file grep -i file grep -v file
- 正则表达式(grep,awk,sed)和通配符
1. 正则表达式 1. 什么是正则表达式? 正则表达式就是为了处理大量的字符串而定义的一套规则和方法. 通过定义的这些特殊符号的辅助,系统管理员就可以快速过滤,替换或输出需要的字符串. Linux正则 ...
- Linux查找命令:grep,awk,sed
grep grep (global search regular expression(RE) and print out the line,全面搜索正则表达式并把行打印出来)是一种强大的文本搜索工具 ...
- grep/awk/sed 或者 并且 否定
Grep 'OR' Operator Find all the lines in a file, that match any of the following patterns. Using GRE ...
- 【Linux】linux中文本操作利器grep,awk,sed
grep命令 grep(global search regular expression)是一种强大的文本搜索工具,它可以使用正则表达式搜索文本,并把匹配的行打印出来.平时搜索文本中内容的时候是非常方 ...
- Linux四剑客find/grep/awk/sed
find ./ -name "*txt" -maxdepth 1 -type f -mtime -2 -exec mv {} ./bbb.txt \; 这条命令表示找当前目录(-m ...
- linux shell grep/awk/sed 匹配tab
处理文件的命令实在是多, sed, awk, grep等.遇到了需要匹配tab的情况, 记录一下. 例子如下:找出文本中第一列是1的行. 文本a 解法1 : 直接使用正则表达式, ^表示开头, \t表 ...
随机推荐
- 从日志记一次Spring事务完整流程
spring事务一次完整流程,创建 >确认获取连接 >完成 >提交>释放链接 DataSourceTransactionManager //Step1. 进入业务方法前,依据事 ...
- Go plan9 汇编:手写汇编
原创文章,欢迎转载,转载请注明出处,谢谢. 0. 前言 在 Go plan9 汇编: 打通应用到底层的任督二脉 一文中介绍了从应用程序到汇编指令的转换.本文将结合汇编和 Go 程序实现手写基本的汇编指 ...
- 一个Java类在运行时候,变量是怎么在JVM中分布的呢?
JVM学习第三篇思考:一个Java类在Jvm内存中是怎么存在的 又名:Java虚拟机的内存模型(JMM)是什么样的. 通过前面两篇文章的学习,我们知道了一个Java类的生命周期及类加载器.我们可以得到 ...
- 数据库中查询含有某个emoji表情的行数据
数据库中查询含有某个emoji表情的行数据 MySQL的情况 代码如下 create table tt6(id int, name varchar(800)); insert into tt6 s ...
- SQL server temporal table 学习笔记
refer: https://blog.csdn.net/Hehuyi_In/article/details/89670462 https://docs.microsoft.com/en-us/sql ...
- HTTP——简介
HTTP
- QT与JavaScript之QT6应用程序与JavaScript脚本集成开发:C++应用程序能与JavaScript实现相互调用吗?
简介 QT6框架中提供了JavaScript引擎类型QJSEngine ,可用于实现 C++应用程序和JavaScript代码之间的相互调用. 目录 什么是 ECMAScript ? JavaScri ...
- aarch64 和 ARMV8 的区别
aarch64 和 ARMv8 是紧密相关但涵义不同的术语,在解释他们的区别之前,让我们先简单理解它们各自的含义: ARMv8: ARMv8 是指 ARM 架构的第八个版本,这是由 ARM Holdi ...
- 墨天轮访谈 | IvorySQL王志斌—IvorySQL,一个基于PostgreSQL的兼容Oracle的开源数据库
分享嘉宾:王志斌 瀚高IvorySQL产品经理 整理:墨天轮社区 导读 大家好,我是瀚高IvorySQL产品经理王志斌,IvorySQL是基于PostgreSQL的衍生开源项目. 我今天分享的内容主要 ...
- C#的函数使用 和参数修饰符 out ref params
// 函数和方法 // 函数好比对象的动作行为 在定义函数的时候,职责(作用/功能)越单一越好 满足高内聚 低耦合的开发思路 // 变量的命名规则 小驼峰 // 函数的命名规则 大驼峰 动词开头 // ...