博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Sed与Awk 学习笔记
阅读量:5086 次
发布时间:2019-06-13

本文共 2588 字,大约阅读时间需要 8 分钟。

  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. 红色部分代表命令执行的范围,命令中可以有也可以没有。如果命令中不包含地址,则表示命令执行范围是所有行。
    地址的具体构成如下:

     

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

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

1:表示第一行

5:表示第五行;

1~2:表示13579 …… 的数列

$:标示末行

 

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

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

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

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

 

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

13:第一行到第三行

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

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

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

3+5:第3行之后的5行即345678

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

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

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

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

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

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

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

 

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

 

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

    ::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中的内容appendpattern space\n

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

    H[address[,address]]H pattern space中的内容appendhold 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的内容appendpattern 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 spacepattern space的内容

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

 

例:

 

 

 

 

转载于:https://www.cnblogs.com/TriassicGingko/p/4141017.html

你可能感兴趣的文章
JavaScript的迭代函数与迭代函数的实现
查看>>
一步步教你学会browserify
查看>>
Jmeter入门实例
查看>>
亲近用户—回归本质
查看>>
中文脏话识别的解决方案
查看>>
CSS之不常用但重要的样式总结
查看>>
Python编译错误总结
查看>>
URL编码与解码
查看>>
日常开发时遇到的一些坑(三)
查看>>
Eclipse 安装SVN插件
查看>>
深度学习
查看>>
TCP粘包问题及解决方案
查看>>
构建之法阅读笔记02
查看>>
添加按钮
查看>>
移动端页面开发适配 rem布局原理
查看>>
Ajax中文乱码问题解决方法(服务器端用servlet)
查看>>
会计电算化常考题目一
查看>>
阿里云服务器CentOS6.9安装Mysql
查看>>
剑指offer系列6:数值的整数次方
查看>>
js 过滤敏感词
查看>>