打印行号编辑命令
跟在地址后面的等号”=”用来打印被匹配的行的行号,除非抑制行的自动输出,行号和行本身将被打印,语法如下:
[line-address]=
该命令不能对一个范围内的行做操作
我们可以使用该命令来打印源文件中某些行,比如,下面的脚本会打印源文件中for语句所在的行号和行本身
#要处理的文本at.txt
for i in {1..5}
do
for i in {1..5} ;
do
echo "haha"
done
echo i
done
#sed脚本内容
/ *for/{
=
p
}
#执行处理
[root@test ~]# sed -nf sed.txt at.txt
1
for i in {1..5}
3
for i in {1..5} ;
读取下一行编辑命令(n)用于读取输入的下一行到模式空间,语法如下:
[address]n
读取下一行命令(n)改变了正常的流控制,导致输入的下一行取代了模式空间中的当前行,脚本中的后续命令应用于替换后的行,而不是当前行。如果没有默认输出,那么在替换发生之前会打印当前行。
下面是一个例子,脚本的作用是删除From之后的一行空格
#要处理的文本at.txt
From:zhangsan@163.com
To:test
Subject:Test
end
#sed脚本
/From/{
n
/^$/d
}
#处理过程
[root@test ~]# sed -f sed.txt at.txt
From:zhangsan@163.com
To:test
Subject:Test
end
在sed脚本中,出现在读取下一行命令之前的命令不会应用于模式空间中新的输入行,出现在后面的命令也不应用与模式空间中旧的输入行。
|