第四章 sed命令和awk编程(上)

目录

概述

sed命令的基本用法

sed编程的一组例子

sed 文本定位的一组例子

sed 基本编辑命令的一组例子

sed 高级编辑命令的一组例子


概述

  • grep,sed和awk就是三个操纵文本文件的命令
  • grep搜索
  • sed 修改和编辑文本文件中某些行
  • awk 是访问文本文件,操纵文本文件中某些数据

sed命令的基本用法

sed编程的一组例子

sed命令选项

  • sed 的 –n 选项:不打印sed 编辑对象的全部文本内容

命令 p 实现匹配行的功能。

  • sed打印3到6行

sed –n ‘3,6p’ input

  •  /pattern/ 进行模式匹配:打印匹配 hahahaha 关键字的行,注意大小写敏感

sed –n ‘/hahahaha/p’ input

  • sed 的 –e选项:表示下一个字符串解析为sed的编辑命令

如打印匹配 hahahaha 关键字的行号 和 行:

sed –n –e ‘/hahahaha/=’ –e ‘/hahahaha/p’ input

注意:

  • sed 的 –f 选项:调用sed 脚本文件

a\:用于追加文本,如在关键字“file:”匹配行后加一行“append a new line”

sed ‘/file:/a\append a new line’ input

注意:sed并不改变源文件,只是将结果输出到标准输出上。

一个 sed 脚本的例子:append.sed 文件

#!/bin/sed –f

/file:/a\

append a new line.\ # \ 是因为有多行需要添加,该符号表示换行

append a new line more.

执行:添加执行权限

./append.sed input

sed 文本定位的一组例子

  • 匹配原字符,用转义符“\”

sed -n ‘/\./p’ input #匹配符号 . 的行的命令

sed –n ‘/\$/p’ input #匹配符号 $ 的行的命令

  • 使用元字符进行匹配

sed –n ‘$p’ input #打印最后一行,“$”在sed中表示最后一行,“p”既可以在单引号内也可在外

sed –n ‘$’p input

sed –n ‘/.*bus/p’ input # 打印含有以bus 结尾的字符串的行

  • !符号:x,y! 表示匹配不在x和y行号范围内的行

sed –n ‘2,10!p’ input # 打印不在2~10范围内的行

  • 使用行号与关键字匹配限定行范围

sed –n ‘/string/,$p’ input # 打印关键字 string 行到最后一行

sed 基本编辑命令的一组例子

  • 插入文本:

i\ 命令:在匹配行之前插入文本

sed ‘/file:/i\This is a new line’ input # 在file: 匹配行的前一行插入 This is a new line

  • 修改文本:

c\命令:将所匹配的文本行用新文本替代

sed ‘/file:/c\This is a modified line’ input

  • 删除文本:

d命令:删除匹配行

sed ‘100d’ input # 删除第100行

sed ‘$d’ input # 删除最后一行

sed ‘1,100d’ input # 删除1到100行

  • 替换文本:替换文本可以替换一个字符串

s命令:s/被替换字符串/新字符串/[替换选项]

  1. sed ‘s/Certificate/CERTIFICATE/p’ input #替换文本中匹配Certificate行中第一处的Certificate为CERTIFICATE

  2. sed ‘s/Certificate/CERTIFICATE/pg’ input #替换文本中匹配Certificate行中所有的Certificate为CERTIFICATE

  3. 注意:sed还可以替换文本中第几次匹配的关键字,只需在前面加上相应的数字(范围为1~512之间)

    如:前面有9次出现关键字Certificate,则第10次的会被换掉

    sed ‘s/Certificate/CERTIFICATE/10p’ input #替换文本中第10次匹配Certificate关键字为CERTIFICATE

  4. 输出到文件:如替换文本中匹配Certificate行中第一处的Certificate为CERTIFICATE 并输出到output文件

    sed -n ‘s/Certificate/CERTIFICATE/w output’ input

  5. &符号:用来保存被替换的字符串以供调用

    sed -n ‘s/AA/(&)/pg’ input      等价于

    sed –n ‘s/AA/(AA)/pg’ input

  6. 使用精确匹配 \<\> 替换:

            122:23:334

            12:23:34

            6:12:23

            9:3:34

            12:23:334

    替换为:

            122:023:334

            012:023:334

            012:023:034

            006:012:023

            009:003:034

            012:023:334

    命令为:sed 's/\<[0-9]\>/0&/g' 1 | sed 's/\<[0-9][0-9]\>/0&/g'

  7. 写入一个新文件

    sed –n ‘1,5 w output’ input #将1~5行写入output文件

    sed –n ‘/hahaha/w output’ input #将匹配hahaha的行写入output文件

  8. 从文本中读入文本

    r命令:在指定行后添加文本文件内容

    sed ‘/Certificate/r otherfile’ input #在匹配行后添加otherfile文本

  9. 退出命令

    q命令:

    sed ‘5 q’ input #打印前5行后退出

    sed –n ‘/.r.*/p’ inout #打印第一次匹配的行就退出

  10. .变换命令

    y命令:sed ‘y/被变换的字符序列/变换的字符序列/’ 输入文件 (两字符序列要求等长)

    sed ‘y/12345/ABCDE/’ input #1->A,2->B,3->C,4->D,5->E变换

  11. 显示控制字符

    sed l:控制字符即非打印字符

    sed –n ‘1,$l’ file #显示file中控制字符

  12.  定位行执行命令组

    sed编辑命令中的 {} 符号可以指定在定位行上所执行的命令组。

    sed –n –e ‘Certificate/p’ –e ‘/Certificate/=’ input 等价于

    sed –n ‘/Certificate/{p;=}’ input

    在与Certificate关键字匹配的行将全部的i替换为I,将第一个le替换为99

    sed ‘/Certificate/{s/i/I/g;s/le/99/;}’ input

sed 高级编辑命令的一组例子

  1. 处理匹配行的下一行

    n命令:读取下一个输入行。如:将Certificate匹配的行的下一行中的 ll 替换为 99 写法为

    sed ‘/Certificate/{n;s/ll/99/;}’ input

  2. sed 缓冲区的处理     

    h, H; g, G

  3. 利用分号分隔多个编辑命令

    sed ‘编辑命令1; 编辑命令2; ……’ 输入文件

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值