sed基础用法

简介:

在linux系统中,sed的文本处理无疑是一个非常强大的工具,用好sed可以使我们工作效率成倍提升,下面就小结一下sed的常用命令参数,只需关注常用的即可。


选项参数

首先来一发sed --help了解一下常用的参数

# sed --help

Usage: sed [OPTION]... {script-only-if-no-other-script} [input-file]...


  -n  忽略打印输出,一般是避免默认输出,只有我们处理的那一行文本会显示在屏幕上

  -e  在命令行进行文本的处理动作        

  -f   后接脚本文件之类,类似于上面的-e参数,只是将执行的命令放到了一个指定的文件中

  -i   修改文件内容

  -c  当使用上面的-i参数修改文件内容时,为了防止修改错误,会自动生成一个和原始文件内容相同且以c结尾的备份文件               

  -l   后接数字,指定一行的长度

  -r  使用正则表达式


命令参数

a :新增, a 的后面可以接字串,而这些字串会在新的一行出现(默认是偶数行,a前面可以指定行号)
c :替换, c 的后面可以接字符串,这些字符串会整行替换掉匹配的行。
d :删除,因为是删除啊,所以 d 后面通常不接任何咚咚;
 i :插入, i 的后面可以接字串,而这些字串会在新的一行出现(目前的上一行);
p :列号,亦即将某个选择的数据印出。通常 p 会与参数 sed -n 一起运行~
s :取代,常用的替换字符操作,如 ‘s/aa/bb/g’ ,用于替换匹配的字符。



示例:

1
# a 新增
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
[root@localhost ~] # sed '3axxxxx' t
1
2
3
xxxxx  #在第三行后增加指定内容
4
5
[root@localhost ~] # sed '2,4axxxxx' t 
1
2
xxxxx  #在2-4行后每行增加指定内容
3
xxxxx
4
xxxxx
5
 
# c 替换某一行内容,可以指定行号,也可以匹配内容
[root@localhost ~] # for n in {1..6};do echo "aa$n" >>test.txt;done
[root@localhost ~] # sed '2cxxxxx' test.txt 
aa1
xxxxx   #替换掉指定行的内容
aa3
aa4
aa5
aa6
[root@localhost ~] # sed '2,5cxxxxx' test.txt 
aa1
xxxxx   #替换多行
aa6
[root@localhost ~] # sed '/aa3/cxxxxx' test.txt                     
aa1
aa2
xxxxx   #指定内容匹配替换
aa4
aa5
aa6
 
# d 删除,可以匹配行号或者内容
[root@localhost ~] # sed 3,5d test.txt 
aa1
aa2     #删除3-5行的内容
aa6
[root@localhost ~] # sed /aa5/d test.txt    
aa1
aa2
aa3
aa4
aa6
 
# i 插入内容
[root@localhost ~] # sed '2ixxxxx' test.txt    
aa1
xxxxx   #在第二行之前插入指定内容
aa2
aa3
aa4
aa5
aa6
[root@localhost ~] # sed '3,5ixxxxx' test.txt      
aa1
aa2
xxxxx   # 3-5行每行前插入指定内容
aa3
xxxxx
aa4
xxxxx
aa5
aa6
 
# p 打印输出指定的行或内容,不加参数-n会多出一个全局输出
[root@host6 ~] # sed -n 2p aaa.txt  
aabb2
[root@host6 ~] # sed -n 2,4p aaa.txt 
aabb2
aabb3
aabb4
[root@host6 ~] # sed -n /aabb3/p aaa.txt    
aabb3
 
# s 取代匹配的字符
[root@host6 ~] # sed s/bb3/xx3/ aaa.txt  
aabb1
aabb2
aaxx3    #替换指定内容
aabb4
aabb5
aabb6

除了上面的这一些最基础的用法外,sed 还支持跟加复杂的高级匹配,支持正则,变量和多个匹配字符(address)的匹配。



sed 指定行范围内匹配

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
[root@host6~] # sed -i '1, /test/ s#123#888#g' test.txt
[root@host6~] # cat test.txt
test  888
test  888
test  123
test  123
 
#适合多次过滤匹配,用于筛选条件较多的场景
[root@host6 ~] # cat test.txt 
aabb111
aacc222
bbdd111
bbcc222
zzaa333
eevv111
bbcc222111cvcv
[root@host6 ~] # sed '/^bb/ s/222/000/'  test.txt 
aabb111
aacc222
bbdd111
bbcc000
zzaa333
eevv111
bbcc000111cvcv
 
#匹配第六行后三行,符合条件的文本内容
[root@host6 ~] # sed  '6,/^bb/ s/222/000/' test.txt  
aabb111
aacc222
bbdd111
bbcc222
zzaa333
eevv111
bbcc000111cvcv



sed中引用shell变量的四种方法

在使用sed引用变量时可能会出现不成功的情况,下面这些规则能让我们更好的使用sed变量

eval sed ’s/$a/$b/’ filename

sed "s/$a/$b/" filename
sed ’s/’$a’/’$b’/’ filename 
sed s/$a/$b/ filename


简单正则匹配字符的方法

$表示匹配结尾,^ 表示匹配开头, &表示前面匹配的内容,= 表示输出行号。

'/\.$/d'         删除以句点结尾行

's/[[:space:]]/ /'   删除一个以上空格,用一个空格代替

'/^[[:space:]]/d'    删除行首空格

's/[[:space:]]\+//' 删除空格

'/^$/d'            删除空行

's/^.//'          删除第一个字符,包括空格

以上只是sed的一些基础用法,在实际应用中一般都比这个复杂。


 本文转自 酥心糖 51CTO博客,原文链接:http://blog.51cto.com/tryingstuff/1839867


相关文章
|
6月前
|
Perl
sed的用法
sed的用法
58 2
|
6月前
|
Unix Perl
sed的具体用法
sed的具体用法
48 2
|
6月前
|
Perl
sed的复杂用法
sed的复杂用法
74 2
|
Perl
sed 基本用法
sed 基本用法
90 0
|
存储 机器学习/深度学习 Unix
sed 和 awk 使用方法 | 学习笔记
快速学习 sed 和 awk 使用方法。
160 0
|
缓存 关系型数据库 MySQL