测试开发学习笔记--Linux三剑客与管道使用

Linux文本处理利器
本文详细介绍Linux下管道、正则表达式、grep、sed及awk的使用技巧,通过实战案例展示如何高效处理文本文件,适用于系统管理员及开发人员。

学习目录

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

一、管道
Linux提供管道符“|”将两个命令隔开,管道符左边命令的输出就会作为管道符右边命令的输入
示例:
echo “hello123” | grep ‘hello’

二、正则表达式
正则表达式是记录文本规则的代码
在这里插入图片描述
在这里插入图片描述
三、grep
根据用户指定的模式(pattern)对目标文本进行过滤,显示被模式匹配到的行
命令形式:

  • grep[OPTIONS] PATTERN [FILE…]

选项:

  • -v 显示不被pattern匹配到的行
  • -i 忽略字符大小写
  • -n 显示匹配的行号
  • -c 统计匹配的行数
  • -o 仅显示匹配到的字符串
  • -E 使用ERE,相当于egrep

实战1:

  • 查找文件内容包含root的行数

    • grep -n root test.txt
  • 查找文件内容不包含root的行

    • grep -nv root test.txt

实战2:

  • 查找以s开头的行
    • grep ^s test.txt
  • 查找以n结尾的行
    • grep n$ test.txt

四、sed
sed是流编辑器,一次处理一行内容
sed处理流程:
1.首先将一行存储到一个模式空间内
2.sed命令处理
3.显示在屏幕上
4.然后清空模式空间
循环处理上述步骤,直到全部处理完

命令形式:
sed [-hn…][-e<script>][-f<script FILE>][FILE]

命令解析:

  • sed [-hn…] [ -e<script>][-f<script文件>][文本文件]
    • -h显示帮助
    • -n仅显示script处理后的结果
    • -e<script>以选项中指定的script来处理输入的文本文件
    • -f<script文件>以选项中指定的script文件来处理输入的文本文件

常用动作

  • a:新增 sed -e ‘4 a newline’
  • c:取代 sed -e ‘2,5c No 2-5 number’
  • d:删除 sed -e ‘2,5d’
  • i:插入 sed -e ‘2i newline’
  • p:打印 sed -n ‘/root/p’
  • s:取代 sed -e ‘s/old/new/g’ 其中/g表示全局匹配

查看帮助

  • man sed
  • sed -h
    用j可以下翻页,用k可以向上翻页,用‘/’斜杠后面加想查找的字符,可以查找匹配内容,然后按n可以想下找匹配项,按N可以向上查找匹配项

实战1

  • 在第四行后添加新字符串
    • sed -e ‘4 newline testfile’ test.txt

实战2
一、在第二行前加上newLine

  • sed ‘2a drink tea’ test.txt

二 、在第二行前加上newline

  • sed ‘2i drink tea’ test.txt

实战3
一、全局替换

  • sed -e ‘s/root/hello/g’ test.txt

二、直接修改文件内容(加了-i参数可以直接修改文件内容,不加是在模式控件内修改)

  • sed -i ‘s/root/hello/g’ test.txt

五、awk
定义:把文件逐行读入,以空格为默认分隔符将每行切片,切开的部分再进行后续处理
流程:
1.把行作为输入,并赋值给$0
2.将行切段,从$1开始
3.对行匹配正则/执行动作
4.打印内容
上述流程循环,处理完所有行
命令形式:

  • awk ‘pattern + action’ [FILE]

命令解析

  • awk ‘pattern + action’ [filenames]
    • -pattern 正则表达式
    • -action 对匹配到的内容执行的命令(默认为输出每行内容)

常用参数

  • FILENAME awk浏览的文件名
  • BEGIN 处理文件之前要执行的操作
  • END 处理文本之后要执行的操作
  • FS 设置输入域分隔符,等价于命令行 -F选项
  • NF 浏览记录的域的个数(列数)
  • NR 已读的记录数(行数)
  • OFS 输出域分隔符
  • ORS 输出记录分隔符
  • RS 控制记录分隔符
  • $0 整条记录
  • $1 表示当前行的第一个域……以此类推

实战1
1、搜索/etc/passwd有root关键字的所有行,并显示对应的shell

  • awk -F: ‘/root/ {print $7}’ /etc/passwd
    2、打印/etc/passwd/的第二行信息
  • awk -F: ‘NR==2{print $0}’ /etc/passwd

实战2
1、使用begin加入标题

  • awk ‘BFGIN {print “begin begin”} {print $1,$2}’ /etc/passwd
    2、自定义分隔符
  • echo ‘111 222|333 444|555 666’ | awk ‘BEGIN{RS="|"}{pirnt $0}’
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值