Sed与Awk 学习笔记

  1. Sed简介

Sed 是面向数据流的行编辑器。流编辑器[1]工作方式如下图,被编辑文本和编辑命令作为输入传到流编辑器,
编辑器根据编辑命令修改文本并输出结果。

?
?

?
?

?
?

?
?

?
?

?
?

?
?

?
?

?
?

注1:文本编辑器主要分为两类,第一类是我们平时使用的可见即所得的全屏幕编辑器,如 vim,记事本、Word等。全屏幕编辑器一、是可以在文件的任意位置进行编辑,

操作十分简便;二、是所见即所得,可以随时查看编辑结果;以上两种优点使得现有的编辑器几乎都属于这一类。尽管全屏幕编辑器有诸多优点,它也存在一定的缺陷,就是很难使用编程语

言自动处理多个文件。第二类编辑器是行编辑器以及由行编辑器演化而来的流编辑器,Sed 就是属于第二类编辑器。第二类的编辑器的

  1. Sed 基本用法:

Sed 命令和其他Linux 命令的用法基本相同,基本格式如下:

sed OPTIONS... [SCRIPT] [INPUTFILE...]

Sed 常用命令:

sed [-n][-e] ‘command‘ file(s)

sed [-n] -f scriptfile file(s)

Command的格式:[address[,address]][!]command
[arguments]

  1. 红色部分代表命令执行的范围,命令中可以有也可以没有。如果命令中不包含地址,则表示命令执行范围是所有行。
    
  2. 地址的具体构成如下:
    
  3. ?
    ?

    ?
    ?

    ?
    ?

    ?
    ?

    ?
    ?

    ?
    ?

    ?
    ?

?
?

?
?

?
?

?
?

?
?

?
?

最后,如果在地址之后加 ! 表示地址范围取反。
例:

---------------------数字标示行------------------------

1:表示第一行

5:表示第五行;

1~2:表示1,3,5,7,9 …… 的数列

$:标示末行

?
?

---------------------正在表达式标示行--------------------

/abc/:包含abc字符串的行

/^[a-b][0-9a-zA-Z]*/:在行首以字母开头数字和字母组成的字符串

\%/[0-9]*/%:包含两条斜线中间是数字的字符串的行

?
?

--------------------逗号分割标示范围行-------------------

1,3:第一行到第三行

2,$:第二行到最后以后

2,/abc/:第二行到首次遇到字符串abc的行

/abc/,14: 首次遇到字符串abc的行到14行

3,+5:第3行之后的5行即3,4,5,6,7,8

/abc/,+3:首次遇到字符串abc的行之后的3行

4,~3:第4行到首次遇到3的倍数行即,4,5,6

/abc/,~3:首次遇到字符串abc的行到之后首次遇到3的倍数行

-------------------地址取反-----------------------

1!:除了第一行之外的所有行

2,5!除了第2行到第5行之外的所有行

/abc/!除了包含abc之外的所有行

?
?

-----------------------------------------------------

?
?

  1. Command 表示执行的具体命令
    					
  2. ????????????????????????????
    					

    :::label,标志一个label,用于b/t的跳转

    =:[address]= 打印出行号

    a:[address]a\ append text to this line.

    b:[address[,address]]b[label] 条件分支语句

    c:[address[,address]]c\ 替换内容

    d:[address[,address]]d 删除pattern中的所有行,并读入下一新行到pattern中

    D:[address[,address]]D 删除multiline pattern中的第一行,不读入下一行

    g:[address[,address]]g 将hold space中的内容拷贝到pattern space中,原来pattern space里的内容清除

    G:[address[,address]]G 将hold space中的内容append到pattern space\n后

    h:[address[,address]]h 将pattern space中的内容拷贝到hold space中,原来的hold space里的内容被清除

    H:[address[,address]]H 将pattern space中的内容append到hold space\n后

    i:[address]i\ 在address行的前面插入文字,和a反义

    l:[address[,address]]l 打印pattern space中的内容,不可打印字符打印出ascii

    n:[address[,address]]n 输出pattern space中的内容,读入下一新行替换掉原来的行

    N:[address[,address]]N 读入下一行形成multiline pattern,用于跨行处理

    p:[address[,address]]p 打印出pattern space中的内容

    P:[address[,address]]P 打印出multiline pattern space中的第一行

    q:[address]q 碰到address行时退出sed script

    r:[address]r file 将文件file的内容append到pattern space后

    s:[address[,address]]s/pattern/replace/[flag] 将pattern替换成replace.

    ????????flag:

    ????????n:替换第n个出现的pattern,默认是第一个出现的pattern

    ????????g:全部替换pattern

    ????????p:如果替换成功则打印

    ????????w file:将替换的行写入到文件里

    t:[address[,address]]t [label] 如果替换成功则跳转

    w:[address[,address]]w file 将pattern中的内容追加写到file文件

    x:[address[,address]]x 交换hold space和pattern space的内容

    y:[address1[,address2]]y/abc/xyz/ 将abc转换为对应的xyz

?
?

例:

?
?

?
?

?
?

?
?

Sed官方资料

时间: 2024-10-12 22:08:06

Sed与Awk 学习笔记的相关文章

sed&&awk学习笔记(1)

sed和awk的基本使用 在sed和awk中,每个指令都包括两个部分:模式和过程.模式是由斜杠(/)分割的正则表达式.过程制定一个或多个将被执行的动作. 执行过程中,读取脚本中的第一个指令并检测当前行的模式,如果没有匹配,这个过程被忽略并读取下一个指令.读取所有的指令,而不是读取与输入行匹配的第一条指令. 所有指令被解释并应用于单个行后,sed输出该行并循环处理每个输入行.awk不自动输出行,脚本中的指令控制awk最终所做的事情. 使用sed 调用sed有两种方法:在命令行上指定编辑指令,或者将

awk学习笔记【转】

Awk学习笔记 整理:Jims of 肥肥世家 <[email protected]> Copyright © 2004 本文遵从GPL协议,欢迎转载.修改.散布. 第一次发布时间:2004年8月6日 Table of Contents 1. awk简介 2. awk命令格式和选项 2.1. awk的语法有两种形式 2.2. 命令选项 3. 模式和操作 3.1. 模式 3.2. 操作 4. awk的环境变量 5. awk运算符 6. 记录和域 6.1. 记录 6.2. 域 6.3. 域分隔符

[linux]awk 学习笔记

awk 学习笔记 最近添加了几个功能的日志,但是呢,这个日志就是输出,一般自己也发现不了问题,于是想写一些简单的监控脚本来看看日志的大致情况, 比如有没有error,每天有多少error报出来. 想到了以前运维的同时分享awk,于是想简单的学习下. 入门 最简单的输入某些列 使用$4 这种来表示 __$0__是输出整列 [root]/root/test$ps -ef|grep uwsgi|awk '{print $1,$5}' root Jul24 root Jul24 root Jul24 r

linux awk学习笔记

awk学习笔记 awk语法格式 awk '{pattern + action}' {filenames} awk作用 awk的最基本功能是在文件或者字符串中基于指定规则浏览和抽取信息,awk抽取信息后,才能进行其他文件操作.完整的awk脚本通常用来格式化文本文件中的信息. 通常,awk是以文件的一行为处理单位的.awk每接收文件的一行,再执行相应的命令,来处理文本.

LVS的持久连接和awk/sed/grep的学习笔记

一.LVS持久连接的模式 1.PPC(persistent port connection) ipvsadm -A|E 192.168.10.1:80 -p 600 定义VIP为192.168.10.1director的80端口为持久连接,也就是只把web服务加入集群服务,可以通过改变端口实现不同服务的持久连接且把不同服务加入集群服务 2.PCC(persistent client connection) ipvsadm -A|E 192.168.10.1:0 -p 600 定义VIP为192.

sed、awk学习篇

[[email protected] ~]$ awk 'BEGIN {FS=":"}{shells[$NF]++;}END{for(i in shells)print i ": " shells[i];}' passwd /sbin/shutdown: 1/bin/bash: 52/sbin/nologin: 49/sbin/halt: 1/nologin: 1/bin/sync: 1 [[email protected] ~]$ cat passwd |sed '

awk学习笔记

1. 数据格式 id1,n1 id2,n2 ... 要对每个id进行一个n的加和 1 cat file1 | awk -F"," '{if(n[$1]>0){n[$1]=n[$1]+$2} else{n[$1]=$2}} END{for(k in n){print k","n[k]}}' > res 这个主要利用了awk的数组

awk 学习笔记

awk 使用教程 awk - pattern-directed scanning and processing language (模式定位 扫描和处理语言) Awk scans each input file for lines that match any of a set of patterns specified literally in prog or in one or more files specified as -f progfile. With each pat- tern

awk学习笔记(二)

一.awk流程控制1.分支结构if语法 单分支-if(判断){指令}双分支-if(判断){指令}else{指令}多分支-if(判断){指令}else if(判断){指令}else{指令}例子 监控某网卡收发流量ifconfig eth0 |awk 'BEGIN{print "接收流量","发送流量"}/bytes/{if($1=="RX"){x=$5}else{y=$5}}END{print x,y}'思路 先将接收和发送流量对应的列找出来,因为