sed命令用法

sed是一种在线编辑器,它一次处理一行内容。处理时,把当前处理的行存储在临时缓存区中,称为“模式空间”,

接着用sed命令处理缓存区的内容,处理完成后,把缓存区的内容送往屏幕。接着处理下一行,这样不断重复,直到

文件末尾。文件内容本身并没有改变。

使用sed命令有2种形式:
1.sed [options] 'commamd' file
2.sed [options] -f script file

例子:
sed '2d' test.txt //删除test.txt文件中的第2行
sed '2,$d' test.txt //删除第2行到最后一行的所有内容,$代表最后一行
sed '/test/'d test.txt //删除指定文件中所有包含test的行

sed 's/test/mytest/g' test.txt //在整行范围内把test替换为mytest。如果没有g,则只替换每一行第一个匹配的

test


sed -i 选项会直接操作文件,而不会把它读入缓存区

sed '$a sdf' test.txt //在最后一行后面添加一行,内容为sdf
a表示,在选择行的后面添加一行,而不是在选定行的末尾添加字符串,所'$a \test'和'$a test'效果一样,都是添

加一行

如果一次添加多行,可以用\表示,它表示换行符
sed '1 a\
dd1\
dd2\
dd3' test.txt
不能在一行写成这样: sed '1 a \dd1\dd2\dd3' test.txt,这样会当做一行内容错误,且结果是新增了一行内容“

dd1dd2dd3”


-n表示在标准输出上输出特定的行,例如被p选择的行
sed -n '/line/ p' test.txt //打印包含line的所有行
sed -n '3,6 p' test.txt // 打印第3行到第6行

sed '5 q' test.txt //打印头5行

如果一个文件hello里面的内容是这样的
3,6 p
则可以这样使用:
sed -n -f hello test.txt //-f表示要使用的程序名称

sed '1 i cxm' test.txt //在第1行的前面插入1行,行的内容为cxm

sed '1 c hahah' test.txt //把第1行的内容替换为hahah
sed 's/sd/kkk/ w tmp' test.txt //把修改过的行输出到tmp文件中
sed '2,4 w tmp2' test.txt //把2到4行的内容输出到tmp2文件中
sed '2,4 !w tmp3' test.txt //把没有选中的行输出到tmp3文件中
sed 's/^./\t&/' test.txt //(^.)可以匹配第一个字符不是空格的所有行,\t代表一个TAB字符,&表示正则表达式

匹配到真的值,用于缩进。

sed -n 'n;p' test.txt //原本sed的执行原理是逐行读取到模式空间,N呢就促使sed把下一行内容也同时读取到模

式空间待命。但是,打印只打印最后一行。到了最后一行,为什么没有输出呢?原来N还有另外一个特性:当无法处

理下一行内容时,N则会中止退出,所以后面的命令也不会再执行。

sed -n '$!n;p' test.txt //$!n表示对最后一行不再执行n命令。


sed一般工作在pattern space,每次从input中取一行数据到pattern space中,然后经过一些处理,将一行数据放入

output中,然后output会输出到屏幕(默认为屏幕,也可以为文件),此时pattern space还存储着这一行数据,直

到input再放入第二行数据取代第一行数据。
hold space可以理解为sed的缓冲区

g:将hold区的内容复制到pattern区中。pattern区中的原来的内容会丢失;
G:将一个换行符和hold区中的内容追加到pattern区中的内容之后;
h:将pattern区中的内容复制到hold区中。hold区中的原来内容将会消失;
H:将一个换行符合pattern区中的内容追加到hold区中的内容的之后;
x:交互pattern区和hold区中的内容;


2,$G
h
$!d

例如:

sed '2,$G;h;$!d' cxm.sh

每一行的的内容都要经过这三个命令处理,hold space里面一般不存储内容,除非你自己往里面添加内容。如果不使用d删除,那么每次处理后pattern区中的内容都会显示出来

上面的指令可以把文件的内容倒过来显示,!表示取非,即除了最后一行,其它的行都删除

sed 's/ *$//' 2个空格后接*$,表示行末的一个或多个空格。对清理行末的空格非常方便

不管指令有多么复杂,这些指令每次都顺序处理一行内容。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值