Linux shell编程学习笔记---第四章

4.1sed

可以一次性处理较大的编辑任务,适用于三种场合:(1)编辑对于交互式文本编辑器来说较大的文本文件(2)。。。。(3)。。。。

sed命令并不修改原文件,需要输出重定向

sed的三种调用方式:

sed命令通常由定位文本行和sed编辑命令两部分组成,

 

 

 

 

4.3 awk编程

awk定义了两个特殊的字段,begin和end一个在主循环开始前执行,一个在主循环开始后执行。awk分为以下三个步骤进行,执行过程如下所示:

调用awk的方法与调用sed的方法类似,也有三种方式

任何awk语句都由模式和动作组成,模式决定何时触发和触发事件,动作决定执行的操作。

awk的第一种调用方式举例

第一种,第二种调用方式,暂时不用。。。。

后面介绍了与awk相关的10种编程。

4.4.2awk的记录和域,相当重要

awk将输入文件的一行看做一个记录,以空格(可以改为其他的区分字符,用FS或者F修改)区分某一行中的不同域,

awk定义了一系列关系运算符

后面的上机练习,未完成

 

--------------------------------------------------上机练习------------------------------------------------------

补充:

1.定位行
sed命令用来处理文本,在处理前首先要找得到待处理的行,这是逻辑上必须的。所以需要首先定位,然后对定位到的各行进行各种处理,包括插入,删除,替换等。
sed -n '10p' testfile // sed命令默认会打印出经过处理后所有的文本,-n选项则不打印这种默认文本。10为要定位的行,找到之后执行p命令,打印这一行。
sed -n '1,10p' testfile // 打印1-10行。
sed -n '2,$p' testfile // 打印第二行到最后一行。
sed -n '3~2p' testfile // 打印第3,5,7,9,…….行,你懂得。
sed -n '/Barry/,10p' testfile // 首先找到第一个匹配/Barry/(可以是其他基本正则表达式)的行,打印从这一行到第10行。
sed -n '1,3!p' testfile // 打印1-3行以外的行("!"的作用)。
sed -n '1{n;p}' testfile // 首先定位到第一行,然后执行命令n,定位到第一行的下一行,然后执行p打印,可见定位之后可以用 {}执行命令组合。
sed -n 'p' testfile // 什么都不写,则定位全部的行。
采用a,b这种模式定位时,首先定位a(如果超出范围或者未找到,就不会去查找b),然后定位b,如果b这一行在a的上面会出现什么状况呢?例如:
sed -n '/Barry/,/Hello/p' testfile 
该首先会定位到/Barry/,如果/Hello/这一行在/Barry/这一行上面,则只打印/Barry/这一行。为什么会这样?原来,sed定位是不回退的,即找到了/Barry/这一行之后,就从这一行下面找/Hello/,当然找不到了,所以只打印了/Barry/这一行。
2.命令
在定位之后当然是执行指定的命令了。看实例:
sed '1,3d' testfile // 删除1-3行,打印剩余的文本,注意,此时文件本身并没有改变。d命令是删除命令。
sed -n '5,10a helloworld' testfile // 在5-10行每一行后面都增加一行 helloworld。a命令在行后插入一行。
sed -n '5,10i helloworld' testfile // 在5-10行每一行前面都增加一行 helloworld。i命令在行前插入一行。
sed -n ‘5~3c helloworld’ testfile //把5,8,11,14,17,20,23,26……依次替换为helloworld。c命令替换行。
sed -n '5,10c helloworld' testfile //  把5-10行整体替换成一行helloworld。当替换目标是连续的行时,把整体替换成一行。
sed -n -r '5,10s/yes|Yes/no/gp' testfile // 5-10行的yes或者Yes被替换成no。 -r 选项使sed支持扩展正则表达式。
s命令是替换命令,通常格式是line1,line2s/字符串1/字符串2/g,即把line1~line2的字符串1全部用字符串2代替,字符串1可以是正则表达式。这里不再对正则表达式详细介绍。如果末尾不加g字符,则表示只替换每行的第一个匹配的字符串。
sed '1,10s/$/helloworld/' testfile // 在1~10行中,替换每行的行尾设置为helloworld。$是正则表达式的行尾标志。
sed '5,10y/abc/ABC/' testfile // 5-10行的a被换成A,b被换成B,c被换成C,类似tr命令的功能。y命令替换以字符为单位,而s命令以字符串为单位。
sed '/My/r textfile' testfile // r命令是读命令,sed使用该命令将一个文本文件中的内容加到当前行的下面。
sed -n '1,10w newfile' testfile // 将1-10行写入newfile。w命令可以将指定的行写入指定的文件。
sed -n '/root/{=;p}' testfile // 定位到/root/行之后,打印行号,然后打印这一行。"="是打印行号的命令。 
3.特殊选项
sed -i '1,10d' testfile // 直接在文件中删除1~10行。-i选项表示对真实文件进行操作,所做的更改将保存到文件中。
sed -s '1d' testfile1 testfile2 testfile3 // 此处有三个文件,如果不加-s,则将三个文件读入,当作一个整体处理,-s选项使分别处理。
sed -e '/root/p' -e '/Barry/d' testfile // 此处用-e选项可以进行多次处理,第一次打印/root/行,第二次删除/Barry/行。
sed -e '/root/{n;p}' -e '/Barry/{n;d}' testfile // 每次处理时,可以对每次匹配到的行执行多个命令。命令之间用";"分隔。

 
 

1.属于sed当中的文本编辑 sed -n 's/\\OU/(ou)/' input

#!/bin/sed -f

调用脚本文件的方式还是不太会。。

2.(1)(2)(3)sed -n '3,8!p' testfile // 打印3-8行以外的行("!"的作用)。(4)

 

posted on 2017-02-17 21:26  毛无语666  阅读(243)  评论(0编辑  收藏  举报

导航