Linux sed 命令

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux sed 命令相关的知识,希望对你有一定的参考价值。

动作:
p 打印输出
d 删除操作
a 在指定的行后面添加一行内容
i 在指定的行前面添加一行内容

 

1、查看操作

1
2
3
sed -n ‘5p‘ file                                         //只查看文件的第5行
sed -n ‘3,5p‘ file                                      //查看文件的第3到第5行
sed -n ‘5,$ p‘ file                                   //打印第5到最后一行

  

2、删除操作

1
2
3
sed ‘3 d‘ 1.txt                                //删除文件的第3行 ,然后将内容进行输出,不是直接操作的文件。
sed ‘3,5 d‘ 1.txt                            //删除第三行到五行。
sed ‘3,$ d‘ 1.txt                           //删除第三行到最后一行。

  


3、添加操作

1
2
3
sed ‘2a word‘ file                          //在第二行后面添加一行,内容为word
 
sed ‘3i word‘ file                          //在第三行前面添加一行,内容为word

  

 

3、查找操作

1
2
3
sed -n ‘/root/p‘ file                         //只输出root关键字的行
 
sed ‘/root/d‘ file                           //将含有root的行删除,然后输出,加上-i可以操作原文件

  


4、替换操作

1
2
3
sed ‘s/root/new/‘ file                          //将文件中的root替换成new,每行只替换一次
sed ‘s/root/new/g‘ file                       //将每行的所有root全部替换成new        g替换多次
sed ‘3,4s/root/new/g‘ 1.txt                  //只替换第3到第4行的root为new

  

sed 综合运用

*****************************************************

文档内容如下:

19-罗锦辉:http://www.cnblogs.com/jw1519
20-甘露秋:http://www.cnblogs.com/bazhahei
21-张靖:http://www.cnblogs.com/zj21
22-黄庭辉:http://www.cnblogs.com/1796440575hth
23-刘波:http://www.cnblogs.com/oppppo
24-杨俊杰:http://www.cnblogs.com/duolaameng
25-侯宝:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
1、只输出学生姓名
cat jw |sed ‘s/[0-9 a-Z ://.\\-]/ /g‘
 
2、只输出每个学生的url
 
cat jw |sed ‘s/.*:\\/.//g‘ |sed ‘/.*:/d‘
 
3、只输出个人博客里的学号
cat jw |sed ‘s/-.*/ /g‘
 
4、只输出个人博客中,两个字姓名的学生名
cat jw |sed ‘s/[0-9 a-Z ://.\\-]//g‘ |grep -v ‘...‘
 
5、只输出每个人博客地址的最后一段,即.com/后面的一段内容
cat jw |sed ‘s/.*\\// /g‘ |sed ‘s/.*://g‘
 
6、只输出最后一段全部是字母的
cat jw |sed ‘s/.*\\// /g‘ |sed ‘s/.*[0-9].*/ /‘|
 
7、只输出最后一段含有大写字母的
cat jw |sed ‘s/.*\\// /g‘ |sed -n ‘/[A-Z]/p‘

将/etc/passwd的最后一行全部改成/bin/bash

1
cat /etc/passwd|sed  ‘s/\\(.*:\\)\\(.*\\)/\\1\\/bin\\/bash/‘                       //    (.*:) 第一部分  (.*)第二部分        1表示第一部分

2.将/etc/passwd每行前面的用户名,添加到最后一段
如:root:x:0:0:root:/root:/bin/bash
处理后应该为
root:x:0:0:root:/root:/bin/bash:root

1
cat passwd |sed ‘s/\\(^[a-Z]*\\)\\(.*\\)/&:\\1/‘                       // &表示全部

 

3.一文本内容如下:
192.168.100.2
172.16.5.4
10.101.2.5
133.37.25.21

通过命令将其处理成如下效果(转换到一行,通过逗号隔开,每行内容用单引号引起来)
‘192.168.100.2‘,‘172.16.5.4‘,‘10.101.2.5‘,‘133.37.25.21‘

1
cat 1.txt |sed "s/^\\|$/‘/g" |tr ‘\\n‘ ‘,‘|sed ‘s/,$/\\n/g‘                     //先将每行文本的前后加上单引号,再将换行符转换为逗号,在将最后一个逗号转换为换行符。  ^ 开始     $结尾    |   或者

 





















以上是关于Linux sed 命令的主要内容,如果未能解决你的问题,请参考以下文章

linux shell sed命令的问题!

linux sed 替换

如何用sed命令替换一行中的某个字符串

sed命令在mac和linux下的区别

关于Linux里的sed命令。

linux之文本内容替换命令sed