O'Reilly Sed & Awk 2nd Ed读书笔记(二)

Chap 2. Understanding Basic Operations



awk源于sed和grep,而后两者又来源于ed,所以首先应该了解ed的基本操作。

ed是一个很简单也很古老的行式编辑器,既支持交互模式,也能使用脚本。它的基本使用方法很简单:

$ed <file>

打开一个文件,输出总字符数并停留在最后一行

$p

打印当前行

$d

删除当前行

$数字

跳转到指定行

命令前可以加寻址模式指定操作的行范围,如:

$1d

删除第一行

$/regular/d

删除匹配模式regular的第一行。如果要删除所有匹配的行,则指定前缀g,如:

$g/regular/d

替换命令则更加复杂也更有趣一些,其基本格式为:[addr]s/pattern/replacement/flag

不多解释了,看下面的例子:

s/regular/complex/

替换当前行中匹配的第一个regularcomplex

s/regular/complex/g

替换当前行中匹配的所有regularcomplex

/regular/s/regular/complex/g

替换匹配regular的第一行中的所有regular为complex。晕了吧?还有这个:

g/regular/s/regular/complex/g

应该很容易猜到什么意思。其实很简单,命令‘s’前面的是地址模式,后面的是替换模式,前后两个‘g’的含义不一样。另外,如果地址中的模式与后面替换的模式相同可以用省略形式:

g/regular/s//complex/g

最后,如果要使用脚本,可以这样:$ed test < ed-script

顺便说一下,终于搞清楚了大名鼎鼎的grep的来历,原来是一个ed命令:

g/re/p : global regular expression print

哈哈哈


sed与ed不同,它是流式编辑器,命令默认是对所有行适用。
比如s/regular/complex/对sed和ed的意义不同。

In ed you use addressing to expand the number of lines that are the object of a command;
in sed, you use addressing to restrict the number of lines affected by a command.

流式的含义:所有字符经处理后都送给标准输出(或指定输出位置)。
sed和awk的使用方式很相近:
命令模式:command [options] script <inputfile>
    or
脚本模式:command -f <scriptfile> <inputfile>

sed的使用

sed [-e] 'pattern' file

使用多个指令时需要指定-e。注意命令行中的pattern最好使用单引号,防止shell对特殊字符进行解释。

指定多个命令的方式:
1、使用分号隔开
2、在每个命令前加-e
3、使用shell的多行编辑模式(Bourne shell,C Shell不支持)

sed不修改文件内容,必要时使用重定向保存结果。

-n 选项防止自动输出所有行,仅输出p命令打印的行。

-e -f 可以混用,虽然手册里没有说明。


awk的命令行使用方法与sed大致相同。同时,awk命令与sed的结构差不多,也是由patternprocedure两部分组成,不同的是procedure不再是单个或多个字符的命令序列,而是命令语句

awk将文件按照分隔符(一般是空格或Tab,连续空白符只算一个,可以指定)分成多个
$0代表整行,$1、$2、$3分别代表该行的每一个列

awk '{ print $1 }' list

打印第一列

awk '/MA/' list

指定模式,默认动作为打印,即打印匹配到的所有行

awk '/MA/ { print $1 }' list

打印匹配到的行的第一列

-F参数指定分隔符,如 -f, 指定逗号。注意与 -f 区分。

多个语句用分号隔开。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值