Linux Sed命令详解+如何替换换行符"\n"(很多面试问道)
2018-01-16 11:04
651 查看
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)第一行之后添加一行
[plain] view
plain copy
[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)第一行之前添加一行
[plain] view
plain copy
[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行
[plain] view
plain copy
[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行
[plain] view
plain copy
[root@localhost ~]# sed -n "2,3p" file.txt
192.168.0.1
162.12.0.123
这里要提到的是,尽量使用-n,不然会出现这样的结果
[plain] view
plain copy
[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
先看源文件
[plain] view
plain copy
[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
处理后
[plain] view
plain copy
[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)插入多行
[plain] view
plain copy
[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,并删除改行
[plain] view
plain copy
[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
[plain] view
plain copy
[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
[plain] view
plain copy
<pre name="code" class="plain">[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)直接修改文件,切记不要修改系统文件
[plain] view
plain copy
[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也就是把所有的行都归为一行
第一种方式
[plain] view
plain copy
[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
第二种方式
[plain] view
plain copy
[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
原博客请点击链接:点击打开链接
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)第一行之后添加一行
[plain] view
plain copy
[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)第一行之前添加一行
[plain] view
plain copy
[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行
[plain] view
plain copy
[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行
[plain] view
plain copy
[root@localhost ~]# sed -n "2,3p" file.txt
192.168.0.1
162.12.0.123
这里要提到的是,尽量使用-n,不然会出现这样的结果
[plain] view
plain copy
[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
先看源文件
[plain] view
plain copy
[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
处理后
[plain] view
plain copy
[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)插入多行
[plain] view
plain copy
[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,并删除改行
[plain] view
plain copy
[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
[plain] view
plain copy
[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
[plain] view
plain copy
<pre name="code" class="plain">[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)直接修改文件,切记不要修改系统文件
[plain] view
plain copy
[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也就是把所有的行都归为一行
第一种方式
[plain] view
plain copy
[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
第二种方式
[plain] view
plain copy
[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
原博客请点击链接:点击打开链接
相关文章推荐
- Linux Sed命令详解+如何替换换行符"\n"(很多面试问道)
- Linux Sed命令详解+如何替换换行符"\n"(很多面试问道)
- 用sed命令如何能把一个匹配模式替换为换行符
- 请教大家,如何使用sed命令,替换文件指定行的内容呢?-Linux系统管理-ChinaUnix.net
- 如何替换某文件中的所有的特定字符?---linux sed命令(文本编辑命令)
- 如何替换某文件中的所有的特定字符?---linux sed命令(文本编辑命令) (转载)
- awk命令简介,linux tee 命令详解,Sed 命令 linux shell 脚本 awk 命令详解
- linux常用命令——sed命令详解
- [Linux] sed命令详解
- Linux 批量字符串替换命令(sed, perl )与vi文本下字符替换命令
- linux sed命令详解
- linux sed命令详解 转
- sed命令介绍 及实例(替换换行符及大小写替换)
- linux sed命令详解
- 如何利用多核CPU来加速你的Linux命令 — awk, sed, bzip2, grep, wc等
- linux sed命令参数及用法详解---linux 利用script来处理文本文件
- linux sed 命令参数及用法详解
- linux sed命令详解
- Linux下Sed命令的用法(之替换)
- 如何利用多核CPU来加速你的Linux命令 — awk, sed, bzip2, grep, wc等