linux中sed如何替换换行符,Linux Sed命令具体解释+怎样替换换行符"\n"(非常多面试问道)...

Sed

Sed是一个强大的文本处理工具

能够採用正则匹配。对文本进行插入删除改动等操作

Sed处理的时候,一次处理一行,每一次把当前处理的存放在暂时缓冲区。处理完后输出缓冲区内容到屏幕,然后把下一行读入缓冲区,如此反复,直到结尾。

1、命令格式和參数

sed [-nefr] [动作] 文件

參数:

-n 安静模式。在sed处理的时候。全部来自STDIN的数据都会被输出到终端。加上-n会仅仅输出处理的哪行

-e 直接在命令列上进行sed动作编辑

-f 直接将sed的动作写在文件内

-r sed动作支持延伸的正则表达(默认仅仅是基础正则)

-i 直接改动文件内容(慎用,尤其是用系统文件做练习的时候)

动作:

a append:添加。在当前行的下一行添加

c   :代替,代替n1到n2之间的行

d delete:删除

i 插入,眼下行的上一行插入

p 打印。经常与-n使用

s 代替,s/old/new/g

2、基础使用方法具体解释

(1)第一行之后加入一行

[root@localhost ~]# nl file.txt | sed "1a add text"

1 wtmp begins Mon Feb 24 14:26:08 2014

add text

2 192.168.0.1

3 162.12.0.123

4 this is the last line

(2)第一行之前加入一行

[root@localhost ~]# nl file.txt | sed "1i add text"

add text

1 wtmp begins Mon Feb 24 14:26:08 2014

2 192.168.0.1

3 162.12.0.123

4 this is the last line

(3)删除第2,3行

[root@localhost ~]# nl file.txt | sed "2,3d"

1 wtmp begins Mon Feb 24 14:26:08 2014

4 this is the last line

(4)打印第2,3行

[root@localhost ~]# sed -n "2,3p" file.txt

192.168.0.1

162.12.0.123

这里要提到的是,尽量使用-n。不然会出现这种结果

[root@localhost ~]# sed "2,3p" file.txt

wtmp begins Mon Feb 24 14:26:08 2014

192.168.0.1

192.168.0.1

162.12.0.123

162.12.0.123

this is the last line

(5)把168换成169

先看源文件

[root@localhost ~]# cat file.txt

wtmp begins Mon Feb 24 14:26:08 2014

192.168.0.1

162.12.0.123

this is the last line

处理后

[root@localhost ~]# sed "s/168/169/g" file.txt

wtmp begins Mon Feb 24 14:26:08 2014

192.169.0.1

162.12.0.123

this is the last line

(6)插入多行

[root@localhost ~]# nl file.txt | sed "2afirst\nsecond" file.txt

wtmp begins Mon Feb 24 14:26:08 2014

192.168.0.1

first

second

162.12.0.123

this is the last line

(7)匹配数据,然后进行操作

仅仅须要在上述的基础上加上正则匹配

sed "/匹配的模式/处理的方式" file.txt

sed "/^root/d" file.txt 对開始有root的删除

比如

匹配begin,并删除改行

[root@localhost ~]# nl file.txt | sed "/begin/d"

2 192.168.0.1

3 162.12.0.123

4 this is the last line

匹配123,而且把含有123的行162都替换成172

[root@localhost ~]# nl file.txt | sed "/123/{s/162/172/g;q}"

1 wtmp begins Mon Feb 24 14:26:08 2014

2 192.168.0.1

3 172.12.0.123

4 this is the last line

这里大括号{}里能够运行多个命令,用;隔开就可以,q是退出

(8)连续编辑 -e

删除第二行,而且匹配把last替换成new

[root@localhost ~]# nl file.txt | sed -e "2d" -e "s/last/new/"

1 wtmp begins Mon Feb 24 14:26:08 2014

3 162.12.0.123

4 this is the new line

(9)直接改动文件,切记不要改动系统文件

[root@localhost ~]# sed -i "/begin/{s/24/25/g}" file.txt

[root@localhost ~]# cat file.txt

wtmp begins Mon Feb 25 14:26:08 2014

192.168.0.1

162.12.0.123

this is the last line

三 、一个比較有趣的样例

怎样替换\n也就是把全部的行都归为一行

第一种方式

[root@localhost ~]# sed ':a;N;$!ba;s/\n/ /g' file.txt

wtmp begins Mon Feb 25 14:26:08 2014 192.168.0.1 162.12.0.123 this is the last line

另外一种方式

[root@localhost ~]# tr "\n" " " < file.txt

wtmp begins Mon Feb 25 14:26:08 2014 192.168.0.1 162.12.0.123 this is the last line last linen

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值