Linux三剑客与管道使用(grep、sed、awk)

  • 管道
  • 正则表达式
  • grep
  • sed
  • awk

管道,什么是管道?

Linux 提供管道符 “|”将两个命令隔开,管道符左边命令的输出就会作为管道符右边命令的输入

# 示例:
echo "hello world"|grep 'hello'

正则,什么是正则?

正则表达式就是记录文本规则的代码

常用的元字符

代码说明
.匹配出换行符以外的任意字符
\w匹配字母或数字或下划线或汉字
\s匹配任意的空白符
\d匹配数字
\b匹配单词的开始或结束
^匹配字符的开始
$匹配字符的结束

常用的限定符

代码/语法说明
*重复零次或更多次
+重复一次或更多次
?重复零次或一次
{n}重复n次
{n,}重复n次或更多次
{n,m}重复n到m次
练习题:
1、匹配以字母a开头的单词;
2、匹配刚好6个字符的单词;
3、匹配1个或多个连续的数字;
4、匹配5到12位的QQ号;
  1. \ba\w*\b
  2. \b\w{6}\b
  3. \d+
  4. ^\d[1-9]{5,12}$

grep

根据用户指定的模式(pattern)对目标文本进行过滤,显示被模式匹配到的行;

命令形式:  
grep [OPTIONS] PATTERN[FILE]
  • -v 显示不被pattern匹配到的行
  • -i 忽略字符的大小写
  • -n 显示匹配的行号
  • -c 统计匹配的行数
  • -o 仅显示匹配到的字符串
  • -E 使用ERE,相当于egrep

实例展示

1、查找文件内容包含 False 的行数
grep -n 'False' log.log

2、查找文件内容不包含 False 的行
grep -nv 'False' log.log

3、查找以 t 开头的行
grep -n ^t grep_demo.txt

4、查找以 s 结尾的行
grep -n s$ grep_demo.txt
[root@VM_0_10_centos test_linux]# cat grep_demo.txt
root
admin
test
devops
root
admin
test01
java
log
java
web001
logs
data
ROOT
LOGS
TEST001
TEST002
[root@VM_0_10_centos test_linux]# grep -n s$ grep_demo.txt
4:devops
12:logs
[root@VM_0_10_centos test_linux]# grep -n -i ^t  grep_demo.txt
3:test
7:test01
16:TEST001
17:TEST002
[root@VM_0_10_centos test_linux]# grep -c -i ^t  grep_demo.txt
4

sed

sed 是流编辑器,一次处理一行内容

命令形式 :
sed [-hn] [-e<script>][-f<script文件>] 文本文件

命令解析

  1. -e
命令参数命令示例说明
a: 新增(add)sed -e ‘4 a newline’在第4行后面新增一行;
c: 取代sed -e ‘2,5c No 2-5 number’用参数c后面的内容取代第2行到第5行的内容;
d: 删除(delete)sed -e ‘2,5d’删除第2行到第5行的内容;
i: 插入(insert)sed -e ‘2 i newline’在第2行前面插入(新增)一行
p: 打印sed -n ‘/root/p’打印出文件中 root所在行的内容
s: 取代sed -e ‘s/old/new/g’全局将 old 替换成 new(模式空间,不会修改源文件)
替换
  • 全局替换 (会将文件中匹配到的所有root替换成hello)
    sed -e 's/root/hello/g' test.txt
  • 直接修改文件内容
    sed -i 's/root/hello/g' test.txt

awk

把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再进行后续处理

命令形式
awk 'pattern + action' [FILE]
常用参数说明
FILENAMEawk 浏览的文件名
BEGIN处理文本之前要执行的操作
END处理文本之后要执行的操作
FS设置输入域分隔符,等价于命令行 -F 选项
NF浏览记录的域的个数 (列数)
NR已读的记录数(行数)
OFS输出域分隔符
ORS输出记录分隔符
RS控制记录分隔符
$0整条记录
$1表示当前行的第一个域…依次类推
1、搜索 /etc/passwd 有root关键字的所有行,并显示对应的shell
awk -F : '/root/{print $7}' /etc/passwd

2、打印 /etc/passwd 的第二行信息
awk 'NR==2 {print $0}' /etc/passwd

3、使用 begin 加入标题
[root@VM_0_10_centos test_linux]# awk -F : 'BEGIN {print "BEGIN", "BEGIN"} /root/ {print $1, $2}' /etc/passwd
BEGIN BEGIN
root x
operator x

4、自定义分割符
[root@VM_0_10_centos test_linux]# echo "111 222|333 444|555 666"|awk 'BEGIN{RS="|"}{print $0}'
111 222
333 444
555 666
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值