#添加文件中数据 sed '3ahello' text.txt #在第三行后面添加一行,实际上没有修改文件,只是预览 sed -i '3ahello' text.txt #在第三行后面添加一行,修改文件 sed '3ihello' text.txt #在第三行前面添加一行,实际上没有修改文件,只是预览
sed '/jiajuu/ihello' text.txt #在jiajuu指定字符串前添加一行 sed '/jiajuu/ahello' text.txt #在jiajuu指定字符串后添加一行
sed '$ahello' text.txt #在最后一行后面添加一行 sed '$ihello' text.txt #在最后一行前面添加一行
#删除文件中数据 sed '2d' text.txt #删除第二行 sed '1~2d' text.txt #删除奇数行,1代表第一行,2代表每隔两行 sed '1,3d' text.txt #删除第一行到第三行 sed '1,3!d' text.txt #删除第一行到第三行外全部行 sed '$d' text.txt #删除最后一行 sed '/jiajuu/d' text.txt #删除含有jiajuu的行 sed '/jiajuu/,$d' text.txt #删除含jiajuu行到最后一行 sed '/jiajuu/,+1d' text.txt #删除含jiajuu行和下一行 sed '/jia\|juu/!d' text.txt #删除含有jia和juu行以外所有行
#更改文件中数据 sed '1chello' text.txt #修改第一行为hello sed '/jiajuu/chello' text.txt #修改含jiajuu行为hello sed '$chello' text.txt #修改最后一行为hello sed 's/jiajuu/hello/' text.txt #将每行的第一个jiajuu替换为hello sed 's/jiajuu/hello/g' text.txt #将每行的所有jiajuu替换为hello sed 's/jiajuu/hello/2' text.txt #将每行的第二个jiajuu替换为hello sed 's/jiajuu/hello/2w temp.txt' text.txt #将替换的内容行写入文件 sed -n 's/jiajuu/hello/2p' text.txt #显示替换的内容,n是获取匹配的,p是打印 sed '/i/s/a.*//' text.txt #正则表达式匹配替换,匹配有i的行,替换匹配行中a后面所有内容为空 sed 's/$/& test/' text.txt #每行的末尾拼接test,&为拼接 sed 's/^/&#/' text.txt #每行的行首添加#,&为拼接
#查询文件中数据 sed -n '/jiajuu/p' #查询含有jiajuu的行 ps -aux | sed -n '/sshd/p' #管道查询所有进程中含有sshd的进程信息命令
#多个sed命令执行 sed -e '1d' -e 's/jiajuu/hello/g' text.txt #方式一,将text.txt文件中的第一行删除并将jiajuu替换为hello sed '1d;s/jiajuu/hello/g' text.txt #方式2,将text.txt文件中的第一行删除并将jiajuu替换为hello
高级用法:缓存区数据交换
模式空间与暂存空间:
sed处理文件是逐行处理的,即读取一行处理一行,输出一行
ssd把文件读出来的每一行存放的空间为模式空间,会在该空间中对读取的内容做相应的处理
sed还有一个额外的空间为暂存空间,暂存空间刚才是只有一个空行
sed可使用相应的命令从模式空间往暂存空间放入内容,或者从暂存空间内容放入模式空间
模式空间与暂存空间的目的时为了更好的处理数据,实现复制、粘贴。
缓存区命令
command
含义
h
将模式空间里面的内容复制到暂存空间缓存区(覆盖方式)
H
将模式空间里面的内容复制到暂存空间缓存区(追加方式)
g
将暂存空间里面的内容复制到模式空间缓存区(覆盖方式)
G
将暂存空间里面的内容复制到模式空间缓存区(追加方式)
x
交换2个空间的内容
示例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
#缓存空间数据交换 #将模式空间第一行复制到暂存空间(覆盖方式),并将暂存空间的内容复制进模式空间中的最后一行(追加方式) sed '1h;$G' text.txt #将第一行复制到最后一行
#将模式空间第一行复制到暂存空间(覆盖方式)并删除,最后将暂存空间的内容复制到模式空间中的最后一行(追加方式) sed '1{h;d};$G' text.txt #第一行删除后粘贴到最后一行
#将模式空间第一行复制到暂存空间(覆盖模式),最后将暂存空间的内容复制到模式空间中替换从第二行带式到最后一行的每一行数据 sed '1h;2,$g' text.txt #将第一行复制粘贴替换第二行到最后一行
#将前三行数据复制到暂存空间(追加方式),之后将暂存空间的所有内容复制到模式空间复制粘贴到模式空间最后一行(追加方式) sed '1,3H;$G' text.txt #将前三行数据复制粘贴到最后一行