sed命令用法

Sed 简介

sed 是一种新型的,非交互式的编辑器。它能执行与编辑器 vi 和 ex 相同的编辑任务。sed 编辑器没有提供交互式使用方式,使用者只能在命令行输入编辑命令、指定文件名,而后在屏幕上查看输出。 sed 编辑器没有破坏性,它不会修改文件,除非使用 shell 重定向来保存输出结果。默认状况下,全部的输出行都被打印到屏幕上。正则表达式

Sed 命令格式

1
sed  命令行格式为:  sed  [选项] ‘  command ’ 输入文本

Sed 定位

Sed 命令在没有给定的位置时,默认会处理全部行;
Sed 支持一下几种地址类型:
1、 first~step
这两个单词的意思: first 指起始匹配行, step 指步长,例如: sed -n 2~5p 含义:从第二行开始匹配,隔 行匹配一次,即 2,7,12.......
2、 $
这个$符表示匹配最后一行。
3、 /REGEXP/
这个是表示匹配正则那一行,经过//之间的正则来匹配。
4、 \cREGEXPc
这个是表示匹配正则那一行,经过\c 和 之间的正则来匹配,c 能够是任一字符
5、 addr1, add2 
定址 addr1, add2 决定用于对哪些行进行编辑。地址的形式能够是数字、正则表达式或两者的结合。若是没有指定地址, sed 将处理输入文件中的全部行。若是定址是一个数字,则这个数字表明行号,若是是逗号分隔的两个行号,那么须要处理的定址就是两行之间的范围(包括两行在内)。范围能够是数字,正则或两者组合。
shell

6、 addr1, +N缓存

从 addr1 这行到往下 行匹配,总共匹配 N+1 
7、 addr1, ~N
Will match addr1 and the lines following addr1 until the next line whose input line number is a multiple of N.【没有看懂是什么意思】
sass

Sed 的正则表达式

表 1: sed 的正则表达式元字符
bash

元字符 功 能 示 例 示例的匹配对象
^ 行首定位符 /^love/ 匹配全部以 love 开头的行
$ 行尾定位符 /love$/ 匹配全部以 love 结尾的行
. 匹配除换行外的单
个字符
/l..e/ 匹配包含字符 l、后跟两个任意
字符、再跟字母 的行
* 匹配零个或多个前
导字符
/*love/ 匹配在零个或多个空格紧跟着
模式 love 的行
[] 匹配指定字符组内
任一字符
/[Ll]ove/ 匹配包含 love 和 Love 的行
[^] 匹配不在指定字符
组内任一字符
/[^A-KM-Z]ove/ 匹配包含 ove,但 ove 以前的那
个字符不在 至 或 至 
的行
\(..\) 保存已匹配的字符
& 保存查找串以便在
替换串中引用
s/love/**&**/ 符号&表明查找串。字符串 love
将替换先后各加了两个**的引
用,即 love 变成**love**
\< 词首定位符 /\<love/ 匹配包含以 love 开头的单词的
\> 词尾定位符 /love\>/ 匹配包含以 love 结尾的单词的
x\{m\} 连续 个 x /o\{5\}/ 分别匹配出现连续 个字母 o
至少 个连续的 o、或 5~10 
连续的 的行
x\{m,\} 至少 个 x /o\{5,\}/
x\{m,n\} 至少 个 x,但不
超过 个 x
/o\{5,10\}/

sed的经常使用选项

表 2.sed 的经常使用选项ssh

选项 说明
-n 使用安静模式,在通常状况全部的 STDIN 都会输出到屏幕上,加入-n 后只打印
被 sed 特殊处理的行
-e 多重编辑,且命令顺序会影响结果
-f 指定一个 sed 脚本文件到命令行执行,
-r Sed 使用扩展正则
-i 直接修改文档读取的内容,不在屏幕上输出

Sed 操做命令

sed 操做命令告诉 sed 如何处理由地址指定的各输入行。若是没有指定地址, sed 就会处理输入的全部的行。表 3.sed 命令
编辑器

命 令 说 明
a\ 在当前行后添加一行或多行
c\ 用新文本修改(替换)当前行中的文本
d 删除行
i\ 在当前行以前插入文本
h 把模式空间里的内容复制到暂存缓存区
H 把模式空间里的内容追加到暂存缓存区
g 取出暂存缓冲区里的内容,将其复制到模式空间,覆盖该处原有内容
G 取出暂存缓冲区里的内容,将其复制到模式空间,追加在原有内容后面
l 列出非打印字符
p 打印行
n 读入下一输入行,并从下一条命令而不是第一条命令开始处理
q 结束或退出 sed
r 从文件中读取输入行
对所选行意外的全部行应用命令
s 用一个字符串替换另外一个


表 4.替换标志
测试

g 在行内进行全局替换
p 打印行
w 将行写入文件
x 交换暂存缓冲区与模式空间的内容
y 将字符转换为另外一字符(不能对正则表达式使用 命令)


报错信息和退出信息

遇到语法错误时, sed 会向标准错误输出发送一条至关简单的报错信息。可是,若是 sed判断不出错在何处,它会“断章取义”,给出使人迷惑的报错信息。若是没有语法错误, sed将会返回给 shell 一个退出状态,状态为 0 表明成功,为非 0 整数表明失败。spa

sed使用实例

下面给出测试文件做为输入文件:命令行

1
2
3
4
5
6
7
8
9
10
[root@Gin scripts] # cat ceshi.txt
northwest       NW      Charles Main    3.0     .98     3       34
western         WE      Sharon Gray     5.3     .97     5       23
southwest       SW      Lewis Dalsass   2.7     .8      2       18
southern        SO      Suan Chin       5.1     .95     4       15
southeast       SE      Patricia Hemenway       4.0     .7      4       17
eastern         EA      TB Savage       4.4     .84     5       20
northeast       NE      AM Main Jr.     5.1     .94     3       13
north           NO      Margot Weber    4.5     .89     5       9
central         CT      Ann Stephens    5.7     .94     5       13

打印: p 命令

命令 是打印命令,用于显示模式缓存区的内容。默认状况下, sed 把输入行打印在屏幕上,选项-n 用于取消默认打印操纵。当选项-n 和命令 同时出现时, sed 可打印选定的内容

案例1:

 

1
2
3
4
5
6
7
8
9
10
11
12
13
[root@Gin scripts] # sed '/north/p' ceshi.txt
northwest       NW      Charles Main    3.0     .98     3       34
northwest       NW      Charles Main    3.0     .98     3       34
western         WE      Sharon Gray     5.3     .97     5       23
southwest       SW      Lewis Dalsass   2.7     .8      2       18
southern        SO      Suan Chin       5.1     .95     4       15
southeast       SE      Patricia Hemenway       4.0     .7      4       17
eastern         EA      TB Savage       4.4     .84     5       20
northeast       NE      AM Main Jr.     5.1     .94     3       13
northeast       NE      AM Main Jr.     5.1     .94     3       13
north           NO      Margot Weber    4.5     .89     5       9
north           NO      Margot Weber    4.5     .89     5       9
central         CT      Ann Stephens    5.7     .94     5       13

说明:默认状况下, sed 把全部输入行都打印在标准输出上。若是在某一行匹配到 north, sed就把该行另外打印一遍。 

案例2:

1
2
3
4
[root@Gin scripts] # sed -n '/north/p' ceshi.txt
northwest       NW      Charles Main    3.0     .98     3       34
northeast       NE      AM Main Jr.     5.1     .94     3       13
north           NO      Margot Weber    4.5     .89     5       9

说明:默认状况下, sed 打印当前缓存区中的输入行。命令 p 指示 sed 将再次打印该行。选项-n 取消 sed 取消默认打印操做。选线-n 和命令配合使用,模式缓冲区内的输入行,只被打印一次。若是不指定-n 选项, sed 就会像上例中那样,打印出重复的行。若是指定了-n,则sed 只打印包含模式 north 的行。 

删除: d 命令

命令 d 用于删除输入行。sed 先将输入行从文件复制到模式缓存区,而后对该行执行 sed命令,最后将模式缓存区的内容显示在屏幕上。若是发出的是命令 d,当前模式缓存区的输入行会被删除,不被显示。
案例 3:

1
2
3
4
5
6
7
8
9
[root@Gin scripts] # sed '3d' ceshi.txt
northwest       NW      Charles Main    3.0     .98     3       34
western         WE      Sharon Gray     5.3     .97     5       23
southern        SO      Suan Chin       5.1     .95     4       15
southeast       SE      Patricia Hemenway       4.0     .7      4       17
eastern         EA      TB Savage       4.4     .84     5       20
northeast       NE      AM Main Jr.     5.1     .94     3       13
north           NO      Margot Weber    4.5     .89     5       9
central         CT      Ann Stephens    5.7     .94     5       13

说明:删除第 行。默认状况下,其他的行都被打印到屏幕上。 

案例 4: 

 

1
2
3
[root@Gin scripts] # sed '3,$d' ceshi.txt
northwest       NW      Charles Main    3.0     .98     3       34
western         WE      Sharon Gray     5.3     .97     5       23

说明:删除从第三行到最后一行内容,剩余各行被打印。地址范围是开始第 行,结束最后一行。

案例 5: 

1
2
3
4
5
6
7
[root@Gin scripts] # sed '/north/d' ceshi.txt
western         WE      Sharon Gray     5.3     .97     5       23
southwest       SW      Lewis Dalsass   2.7     .8      2       18
southern        SO      Suan Chin       5.1     .95     4       15
southeast       SE      Patricia Hemenway       4.0     .7      4       17
eastern         EA      TB Savage       4.4     .84     5       20
central         CT      Ann Stephens    5.7     .94     5       13

说明:全部包含模式 north 的行都被动删除,其他行被打印。 

替换: s 命令

命令 s 是替换命令。替换和取代文件中的文本能够经过 sed 中的 s 来实现, s 后包含在斜杠中的文本是正则表达式,后面跟着的是须要替换的文本。能够经过 g 标志对行进行全局替换
案例 6: 

1
2
3
4
5
6
7
8
9
10
[root@Gin scripts] # sed 's/west/north/g' ceshi.txt
northnorth      NW      Charles Main    3.0     .98     3       34
northern                WE      Sharon Gray     5.3     .97     5       23
southnorth      SW      Lewis Dalsass   2.7     .8      2       18
southern        SO      Suan Chin       5.1     .95     4       15
southeast       SE      Patricia Hemenway       4.0     .7      4       17
eastern         EA      TB Savage       4.4     .84     5       20
northeast       NE      AM Main Jr.     5.1     .94     3       13
north           NO      Margot Weber    4.5     .89     5       9
central         CT      Ann Stephens    5.7     .94     5       13

说明:命令用于替换。命令末端的 表示在行内全局替换;也就是说若是每一行里出现多个west,全部的 west 都会被替换为 north。若是没有 g命令,则只将每一行的第一 west 替换为 north
案例 7

1
2
[root@Gin scripts] # sed -n 's/^west/north/p' ceshi.txt
northern                WE      Sharon Gray     5.3     .97     5       23

说明:命令用于替换。选线-n 与命令行末尾的标志 结合,告诉 sed 只打印发生替换的那些行;也就是说,若是只有在行首找到 west 并替换成north 时才会打印此行。
案例 8

1
2
3
4
5
6
7
8
9
10
[root@Gin scripts] # sed 's/[0-9][0-9]$/&.5/' ceshi.txt
northwest       NW      Charles Main    3.0     .98     3       34.5
western         WE      Sharon Gray     5.3     .97     5       23.5
southwest       SW      Lewis Dalsass   2.7     .8      2       18.5
southern        SO      Suan Chin       5.1     .95     4       15.5
southeast       SE      Patricia Hemenway       4.0     .7      4       17.5
eastern         EA      TB Savage       4.4     .84     5       20.5
northeast       NE      AM Main Jr.     5.1     .94     3       13.5
north           NO      Margot Weber    4.5     .89     5       9
central         CT      Ann Stephens    5.7     .94     5       13.5

说明:当“与”符号( &)用在替换串中时,它表明在查找串中匹配到的内容时。这个示例中全部以 位数结尾的行后面都被加上.5
案例 9: 

1
2
[root@Gin scripts] # sed -n 's/Hemenway/Jones/gp' ceshi.txt
southeast       SE      Patricia Jones  4.0     .7      4       17

说明:文件中出现的全部的 Hemenway 都被替换为 Jones,只有发生变化的行才会打印出来。选项-n 与命令 的组合取消了默认的输出。标志 g的含义是表示在行内全局替换。

案例 10

1
2
3
4
5
6
7
8
9
10
11
[root@Gin scripts] # sed 's/\(Mar\)got/\1linanne/p' ceshi.txt
northwest       NW      Charles Main    3.0     .98     3       34
western         WE      Sharon Gray     5.3     .97     5       23
southwest       SW      Lewis Dalsass   2.7     .8      2       18
southern        SO      Suan Chin       5.1     .95     4       15
southeast       SE      Patricia Hemenway       4.0     .7      4       17
eastern         EA      TB Savage       4.4     .84     5       20
northeast       NE      AM Main Jr.     5.1     .94     3       13
north           NO      Marlinanne Weber        4.5     .89     5       9
north           NO      Marlinanne Weber        4.5     .89     5       9
central         CT      Ann Stephens    5.7     .94     5       13

说明:包含在圆括号里的模式 Mar 做为标签 保存在特定的寄存器中。替换串能够经过\1 来引用它。则 Margot 被替换为 Marlinane
案例 11: 

1
2
3
4
5
6
7
8
9
10
[root@Gin scripts] # sed 's#3#88#g' ceshi.txt
northwest       NW      Charles Main    88.0    .98     88      884
western         WE      Sharon Gray     5.88    .97     5       288
southwest       SW      Lewis Dalsass   2.7     .8      2       18
southern        SO      Suan Chin       5.1     .95     4       15
southeast       SE      Patricia Hemenway       4.0     .7      4       17
eastern         EA      TB Savage       4.4     .84     5       20
northeast       NE      AM Main Jr.     5.1     .94     88      188
north           NO      Margot Weber    4.5     .89     5       9
central         CT      Ann Stephens    5.7     .94     5       188

说明:紧跟在 命令后的字符就是查找串和替换串之间的分隔符。分隔符默认默认为正斜杠,但能够改变。不管什么字符(换行符,反斜线除外),只要紧跟在 命令,就成了新的串分隔符。这个方法在查找包含正斜杠模式时很管用,例如查找路径名或生日。

指定行的范围:逗号

行的范围从文件中的一个地址开始,在另外一个地址结束。地址范围能够是行号(例如5,10),正则表达式(例如/Dick/和/Joe/),或者二者的结合(例如/north/,$)范围是闭合的——包含开始条件的行,结束条件的行,以及二者之间的行。若是结束条件没法知足,就会一直操做到文件结尾。若是结束条件知足,则继续查找知足开始条件的位置,范围从新开始。
案例 12: 

1
2
3
4
5
6
[root@Gin scripts] # sed -n '/west/,/east/p' ceshi.txt
northwest       NW      Charles Main    3.0     .98     3       34
western         WE      Sharon Gray     5.3     .97     5       23
southwest       SW      Lewis Dalsass   2.7     .8      2       18
southern        SO      Suan Chin       5.1     .95     4       15
southeast       SE      Patricia Hemenway       4.0     .7      4       17

说明:打印模式 west 和 east 之间全部的行。若是 west 出如今 east 以后的某一行,则打印的范围从 west 所在行开始,到下一个出现 east 的行或文件的末尾(若是前者未出现)。图中用箭头表示出了该范围。

 

案例 13: 

 

1
2
3
4
[root@Gin scripts] # sed -n '5,/northeast/p' ceshi.txt
southeast       SE      Patricia Hemenway       4.0     .7      4       17
eastern         EA      TB Savage       4.4     .84     5       20
northeast       NE      AM Main Jr.     5.1     .94     3       13

说明:打印从第 行开始第一个以 northeast 开头的行之间的全部行。

案例 14: 

1
2
3
4
5
6
7
8
9
10
[root@Gin scripts] # sed '/west/,/east/s/$/**VACA**/' ceshi.txt
northwest       NW      Charles Main    3.0     .98     3       34**VACA**
western         WE      Sharon Gray     5.3     .97     5       23**VACA**
southwest       SW      Lewis Dalsass   2.7     .8      2       18**VACA**
southern        SO      Suan Chin       5.1     .95     4       15**VACA**
southeast       SE      Patricia Hemenway       4.0     .7      4       17**VACA**
eastern         EA      TB Savage       4.4     .84     5       20
northeast       NE      AM Main Jr.     5.1     .94     3       13
north           NO      Margot Weber    4.5     .89     5       9
central         CT      Ann Stephens    5.7     .94     5       13

说明:修改从模式 wast 和 east 之间的全部行,将各行的行尾($)替换为字符串**VACA**。换行符被移到新的字符串后面。 

多重编辑: e 命令

-e 命令是编辑命令,用于 sed 执行多个编辑任务的状况下。在下一行开始编辑前,全部的编辑动做将应用到模式缓存区的行上。
案例 15: 

1
2
3
4
5
6
7
[root@Gin scripts] # sed -e '1,3d' -e 's/Hemenway/Jones/' ceshi.txt
southern        SO      Suan Chin       5.1     .95     4       15
southeast       SE      Patricia Jones  4.0     .7      4       17
eastern         EA      TB Savage       4.4     .84     5       20
northeast       NE      AM Main Jr.     5.1     .94     3       13
north           NO      Margot Weber    4.5     .89     5       9
central         CT      Ann Stephens    5.7     .94     5       13

说明:选项-e 用于进行多重编辑。第一重编辑编辑删除第 1~3 行。第二重编辑将Hemenway 替换为 Jones。由于是逐行进行这两行编辑(即这两个命令都在模式空间的当前行上执行),因此编辑命令的顺序会影响结果。例如,若是两条命令都执行的是替换,前一次替换会影响后一次替换。

追加: a 命令

a 命令是追加命令,追加将新文本到文件中当前行(即读入模式的缓存区行)的后面。不论是在命令行中,仍是在 sed 脚本中, a 命令老是在反斜杠的后面。
案例 16: 

1
2
3
4
5
6
7
8
9
10
11
12
13
[root@Gin scripts] # sed '/^north/a Hello world!' ceshi.txt 
northwest       NW      Charles Main    3.0     .98     3       34
Hello world!
western         WE      Sharon Gray     5.3     .97     5       23
southwest       SW      Lewis Dalsass   2.7     .8      2       18
southern        SO      Suan Chin       5.1     .95     4       15
southeast       SE      Patricia Hemenway       4.0     .7      4       17
eastern         EA      TB Savage       4.4     .84     5       20
northeast       NE      AM Main Jr.     5.1     .94     3       13
Hello world!
north           NO      Margot Weber    4.5     .89     5       9
Hello world!
central         CT      Ann Stephens    5.7     .94     5       13

说明:命令 用于追加。字符串 Hello, World!被加在以 north 开头的各行以后。若是要追加的内容超过一行,则除最后一行外,其余各行都必须以反斜杠结尾。

插入: i 命令

i 命令是插入命令,相似于 a 命令,但不是在当前行后增长文本,而是在当前行前面插入新的文本,即刚读入缓存区模式的行。
案例 17: 

1
2
3
4
5
6
7
8
9
10
11
12
13
[root@Gin scripts] # sed '/eastern/i Hello,world!\
> -----------------------' ceshi.txt
northwest       NW      Charles Main    3.0     .98     3       34
western         WE      Sharon Gray     5.3     .97     5       23
southwest       SW      Lewis Dalsass   2.7     .8      2       18
southern        SO      Suan Chin       5.1     .95     4       15
southeast       SE      Patricia Hemenway       4.0     .7      4       17
Hello,world!
-----------------------
eastern         EA      TB Savage       4.4     .84     5       20
northeast       NE      AM Main Jr.     5.1     .94     3       13
north           NO      Margot Weber    4.5     .89     5       9
central         CT      Ann Stephens    5.7     .94     5       13

说明:命令 i 是插入命令。若是在某一行匹配到模式 eastern,i 命令就在该行的上方插入命令中插入反斜杠后面后的文本。除了最后一行, 

修改: c 命令

c 命令是修改命令。 sed 使用该命令将已有的文本修改为新的文本。旧文本被覆盖。
案例 18:

1
2
3
4
5
6
7
8
9
10
11
12
[root@Gin scripts] # sed '/eastern/c Hello,world! \
> ------------------' ceshi.txt
northwest       NW      Charles Main    3.0     .98     3       34
western         WE      Sharon Gray     5.3     .97     5       23
southwest       SW      Lewis Dalsass   2.7     .8      2       18
southern        SO      Suan Chin       5.1     .95     4       15
southeast       SE      Patricia Hemenway       4.0     .7      4       17
Hello,world!
------------------
northeast       NE      AM Main Jr.     5.1     .94     3       13
north           NO      Margot Weber    4.5     .89     5       9
central         CT      Ann Stephens    5.7     .94     5       13

说明:命令是修改命令。该命令将完整地修改在模式缓冲区行的当前行。若是模式 eastern被匹配, 命令将其后的文本替换包含 eastern 的行。

获取下一行: n 命令

n 命令表示下一条命令。 sed 使用该命令获取输入文件的下一行,并将其读入到模式缓冲区中,任何 sed 命令都将应用到匹配行,紧接着的下一行上。
案例 19: 

1
2
3
4
5
6
7
8
9
10
[root@Gin scripts] # sed '/eastern/{n;s/AM/Archie/;}' ceshi.txt 
northwest       NW      Charles Main    3.0     .98     3       34
western         WE      Sharon Gray     5.3     .97     5       23
southwest       SW      Lewis Dalsass   2.7     .8      2       18
southern        SO      Suan Chin       5.1     .95     4       15
southeast       SE      Patricia Hemenway       4.0     .7      4       17
eastern         EA      TB Savage       4.4     .84     5       20
northeast       NE      Archie Main Jr. 5.1     .94     3       13      ## 此行就是被替换的行
north           NO      Margot Weber    4.5     .89     5       9
central         CT      Ann Stephens    5.7     .94     5       13

说明:若是在某一行匹配到模式 eastern, 命令就指示 sed 用下一个输入行(即包含 AM MainJr 的那行)替换模式空间中的当前行,并用 Archie替换 AM,而后打印该行,再继续往下处理

转换: y,命令

y 命令表示转换。该命令与 tr 命令类似,字符按照一对一的方式从左到右进行转换。例如 y/abc/ABC/,会把小写字母转换成大写字母, a-->A,b-->B,c-->C。
案例 20: 

1
2
3
4
5
6
7
8
9
10
[root@Gin scripts] # sed '1,3y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/' ceshi.txt
NORTHWEST       NW      CHARLES MAIN    3.0     .98     3       34
WESTERN         WE      SHARON GRAY     5.3     .97     5       23
SOUTHWEST       SW      LEWIS DALSASS   2.7     .8      2       18
southern        SO      Suan Chin       5.1     .95     4       15
southeast       SE      Patricia Hemenway       4.0     .7      4       17
eastern         EA      TB Savage       4.4     .84     5       20
northeast       NE      AM Main Jr.     5.1     .94     3       13
north           NO      Margot Weber    4.5     .89     5       9
central         CT      Ann Stephens    5.7     .94     5       13

说明:命令把 1~3 行中全部的小写命令字母都转换成了大写。正则表达式元字符对 命令不起做用。与替分隔符同样,斜杠能够被替换成其余字符。 

退出: q 命令

q 命令表示退出命令。该命令将致使 sed 程序退出,且再也不进行其余的处理。

案例 21: 

1
2
3
4
5
6
[root@Gin scripts] # sed '5q' ceshi.txt
northwest       NW      Charles Main    3.0     .98     3       34
western         WE      Sharon Gray     5.3     .97     5       23
southwest       SW      Lewis Dalsass   2.7     .8      2       18
southern        SO      Suan Chin       5.1     .95     4       15
southeast       SE      Patricia Hemenway       4.0     .7      4       17

说明:打印完第 行以后, 让 sed 程序退出。
案例 22

1
2
3
4
[root@Gin scripts] # sed '/Lewis/{ s/Lewis/Joseph/;q; }' ceshi.txt
northwest       NW      Charles Main    3.0     .98     3       34
western         WE      Sharon Gray     5.3     .97     5       23
southwest       SW      Joseph Dalsass  2.7     .8      2       18

说明:在某行匹配到模式 Lewis 时, 表示先用 Joseph 替换 Lewis,而后 命令让 sed 退出。 

生产环境案例

在实际生产中,在修改配置文件的时候,有一些空格、空行、带“ #”开头的注释都要删除或替换,下面为你们介绍几个实用的例子
案例 23

1
2
3
4
5
[root@Gin scripts] # cat sed.txt
  today is  nice  day
  you can walk out on the street
  it will be  import  to you
##每行的前面都有空格
1
2
3
4
5
6
7
8
9
10
[root@Gin scripts] # sed 's/^[ ]*//' sed.txt
today is  nice  day
you can walk out on the street
it will be  import  to you
## 注:[ ]里面有个空格
或者:
[root@Gin scripts] # sed 's/^[[:space:]]*//' sed.txt
today is  nice  day
you can walk out on the street
it will be  import  to you

案例24:删除文本中空行和空格组成的行及#号注释的行 

1
2
3
4
5
6
7
8
[root@Gin scripts] # grep -Eiv "^#|^$" ssh_config
Host *
         GSSAPIAuthentication  yes
         ForwardX11Trusted  yes
         SendEnv LANG LC_CTYPE LC_NUMERIC LC_TIME LC_COLLATE LC_MONETARY LC_MESSAGES
         SendEnv LC_PAPER LC_NAME LC_ADDRESS LC_TELEPHONE LC_MEASUREMENT
         SendEnv LC_IDENTIFICATION LC_ALL LANGUAGE
         SendEnv XMODIFIERS

案例 25:从 Google 上下载下来的配置文件每每都带有数字,如今须要删除全部行的首数字。


1
2
3
4
5
6
7
8
[root@Gin scripts] # cat sed.txt
1today is  nice  day
2you can walk out on the street
3it will be  import  to you
[root@Gin scripts] # sed 's/^[0-9][0-9]*//g' sed.txt
today is  nice  day
you can walk out on the street
it will be  import  to you


*使用sed修改文件
a. sed 's/t/hello/g' b.txt > b.txt.tmp
 mv b.txt.tmp b1.txt
b. sed -i 's/t/hello/g' b.txt
c. sed -in-place -e 's/t/hello/g' b.txt
相关文章
相关标签/搜索