1.在命令行定义编辑器命令
命令格式 sed options script file
sed不会修改文本文件的数据,他只会将修改后的数据发送到STDOUT。
2.在命令行上使用多个编辑器命令
将命令放在一个文件中
3.s命令使用替换标记
.数字代表新文本将替换第几处模式匹配的地方
.g,替换所有的
。p,原来的内容打印出来
。w file,将替换的结果写到文件。
-n命令禁止打印模式空间,-n和p一起使用只打印替换的行。
4.使用地址
4.1指定行
sed ‘2s/dog/cat/‘ data1
sed ‘2,3s/dog/cat/‘ data1
sed ‘2,$s/dog/cat/‘ data1
4.2匹配文本模式
sed ‘/farsight/s/bash/csh/‘ /etc/passwd
4.3组合命令
5.删除行
sed ‘d‘ data1 全部删除
sed ‘3d‘ data1 删除第三行
sed ‘2,3d‘ data1 删除2-3行
sed ‘/quick/d‘ data1 删除匹配到quick的行
删除两个模式之间的行。
sed ‘/1/,/3/d‘ data1 删除匹配到1至匹配到3的行
6.插入和附加文本
sed ‘3i\
>this is a inserted line.‘ data1 插入3行前面
sed ‘3a\
>this is a inserted line.‘ data1 放在第3行后面
sed ‘$a\
>this is a inserted line.‘ data1 放在最后一行后面
插入多行
7.修改行
sed ‘3c\
>this is a changed line.‘ data1 将第3行修改为
sed ‘/number1/c\
>this is a changed line.‘ data1 修改匹配的行
sed ‘2,3c\
>this is a changed line.‘ data1 修改2至3行
8.打印p
sed -n ‘2,3p‘ data1 打印2至3行
sed -n ‘/3/{
>p
>s/line/test/p
>}‘ data1 打印第三行,和匹配line后替换的行。
打印行号
sed ‘=‘ data1
打印匹配行的行号
9.和文件一起工作
写入文件
sed ‘1,2w test‘ data1 data1的1至2行写入test
从文件中读取数据
将data3中的数据放在data2的第2行后面
sed ‘$r data3‘ data2 将data3中的数据放在data2的最后面
sed ‘/line1/r data3‘ data2 读取data3放在data2中匹配line1的后面
炫技时刻:
在匹配到tag后写入文件data3的内容,然后删除tag
------------------------------------------------
sed进阶
1.
n:读取下一行到模式空间
N:附加下一行到模式空间
P:Print up to the first embedded newline of the current pattern space.
D:Delete up to the first embedded newline in the pattern space. Start next cycle, but skip reading from the input if there is still data in
the pattern space.
2.模式空间与保持空间
h |
将模式空间复制到保持空间 |
H |
将模式空间附加到保持空间 |
g |
将保持空间复制到模式空间 |
G |
将保持空间附加到模式空间 |
x |
交换模式空间与保持空间的内容 |
翻转一个文件,利用模式空间和保持空间翻转文件。
排除命令!:打印不匹配的行
3.改变流
跳转命令
b [lable]
不加lable时跳转到脚本末尾,加了lable跳转到对应的lable。
也可以跳到前面的标签
测试
t [lable]
当前一条命令成立时才跳转。
4.模式替换
4.1and(&)符号
&代表前面匹配到的东西。
4.2替换单独的单词
当匹配到name is的时候,只提取出name,\1代表第一个圆括号里面的内容。
5.在脚本中使用sed
将sed命令封装在脚本中。
重定向sed的输出,使用``将sed的输出赋值给变量。
6.创建sed实用脚本
6.1加倍行间距
利用保持空间默认值。
对含有多个空白行的加倍行间距,思路是先删除所有的空白行,在加入空白行。
6.2给文件中的行编号
6.3打印末尾行
使用滑动窗口显示最后几行。
$q遇到最后一样就退出,N读取下一行到模式空间,11,$D从第11行到最后一行都要删除模式空间的第一行。所以窗口大小为10行。
6.4删除连续的空白行
创建一个任意字符开始,到空白行的区间结束的区间。
6.5删除开头的空白行
创建一个任意字符到结尾行的区间。
6.6删除末尾的行
收集所有末尾的空白行删除。