大夏shell编程学习笔记(6)

最近的学习都集中在研究sed和gawk这两个命令行文本编辑程序的使用上,终于今天把这个内容告一段落了,今天最后再把这两个编辑器的深入的使用经验学习一下。

sed高阶

①多行命令
★ N:在数据流中添加下一行以创建用于处理的多行组。
★ D:删除多行组中的单行。
★ P:打印多行组中的单个行。


首先我们来区分一下,单行命令n和多行命令N。简单的说,n就是讲sed继续执行的位置跳到了匹配的数据流的下一行,而N就是把匹配数据流的下一行合并到上一行,构成一个段落文本。
例如:

$ cat data1
this is a boy
this is a man
boy this

$ sed '/boy/{
> n
> d
> }' data1
this is a boy

boy this 

$ sed '
> s/boy this/man is/
> N
> s/boy this/man is/
> ' data
this is a man is is a man
man is

★ 将单行命令移动到N命令前,使得文本末尾行的文本能够被修改,要不然在N命令下会忽略最后一行的文本。


多行删除命令D:删除模式空间中的第一行。
多行打印命令P:打印模式空间中的第一行。
例如:

$ cat data2
this is a question
is bad 
question is bad 

$ sed '
> N
> /question\nis/D
> ' data2
is bad 
question is  bad

$ sed '
> N
> /question\nis/P
> ' datd2
this is a question

②保留空间
模式空间: 是一个活动的缓冲区,它在sed编辑器处理命令时保留被检查的文本。sed也可以利用另一个成为保留空间的缓冲区。其主要命令如下:

命令描述命令描述
h将模式空间复制到保留空间G将保留空间追加到模式空间
H将模式空间追加到保留空间x将模式空间和保留空间交换
g将保留空间复制到模式空间

③否定命令
感叹号(!)用于否定命令。
例如:

$ sed -n '/header/!p' data1 #打印data中除了含有header的余下所有行

④更改命令流
分支命令(b)的格式为:

[address]b [label]

:label             #接下来定义标签内容

简单来说可以归纳为定义地址来执行所规定的标签内的新的内容。


测试命令(t)的格式为:

[address]t [label]

:label             #接下来定义标签内容,也可以将标签命令直接写在t 的后面

简单来说可以归纳为测试命令是当前面的替换命令成功匹配以后就执行测试命令。类似if-then的简单方式。

⑤模式替换
与号(&):用于表示替换命令中的匹配模式。
例如:

$ echo "The cat sleeps in his hat." | sed 's/.at/".at"/g'
The ".at" sleeps in his ".at".

$ echo "The cat sleeps in his hat." | sed 's/.at/"&"/g'
The "cat" sleeps in his "hat".

$ echo "The cat sleeps in his hat." | sed 's/sleep \(.n\)/\1/'
The cat in his hat.     #用转义的括号标注子字符串元素,用\n指定第几个元素

⑥sed的一些小技巧
删除文本中的空行,并且为每行间添加空行,最后一行不加。

$ sed '/^$/d;$!G' data

删除连续的空行

$ sed '/./,/^$/!d' data

删除开头的空行

$ sed '/./,$!d' data

删除结尾空行

$ sed '{
:start
/^\n*$/{$d; N; b start}
}'

对文件中的行计数

$ sed '=' data | sed 'N; s/\n/ /'
1 This
2 hello

删除HTML标记

$ sed 's/<[^>]*>//g' data 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值