Linux命令--sed语法

sed命令是一个面向字符流的非交互式编辑器,也就是说sed不允许用户与它进行交互操作。sed是按行来处理文本内容的。在shell中,使用sed来批量修改文本内容是非常方便的。

Linux命令--sed语法_第1张图片

 


sed命令的选项

语法:sed [选项] [动作]

选项与参数:

Linux命令--sed语法_第2张图片

 

function:

Linux命令--sed语法_第3张图片

 

一般function的前面会有一个地址的限制,例如 [地址]function,表示我们的动作要操作的行。


删除行

//test.txt 内容如下

详解Linux命令--sed语法和实例讲解

 

sed '1,2d' test.xx 

输出:

详解Linux命令--sed语法和实例讲解

 

其中1,2d中的d表示删除,而d前面的表示删除的行的地址,而1,2表示一个地址范围,也就是删除第1行和第2行。地址范围的表示一般是 m,n 表示对m和n行之间的所有行进行操作,也包含第m行和第n行。


新增行

sed '1a hello world' test.txt

输出:

Linux命令--sed语法_第4张图片

 

其中a命令表示在指定行的后面附加一行,1a则是在第一行的后面添加一行,添加的内容就是a后面的内容,如果a的前面没有地址限定则在所有行的后面都会添加指定的字符串

sed '1i hello world' test.txt

输出:

Linux命令--sed语法_第5张图片

 

命令i表示在指定的行的前面插入一行,插入的内容为其后面的字符串


替换行

sed '1c hello world' test.txt

输出:

Linux命令--sed语法_第6张图片

 

命令c会替换指定的行的所有内容,替换成其后面的字符串,所有的新增,删除,替换行,这些命令前面的地址修饰都可以指定地址空间,也都可以使用正则表达式,命令会应用在选出的符合地址条件的所有行上面,例如:

sed '/^2/c hello world' test.txt

输出:

Linux命令--sed语法_第7张图片

 

替换以2开头的行,其内容是c命令后面的字符串


替换部分字符串而不是整行

sed中除了上面的命令是针对整行进行操作的之外,还提供一个替换命令,该命令对某一行中的部分字符串进行操作,下面举一个简单的例子,还是同样的文本内容,执行下面的命令:

sed 's/aa/AA/' test.txt

输出:

详解Linux命令--sed语法和实例讲解

 

s命令后面接的3个斜杠分隔的两串字符串,其含义是 s/待替换的字符串/新字符串/ 也就是说使用后面的 AA 替换文件中出现的前面的 aa 。实际上这里的替换仅仅替换每一行遇到的第一个aa,


将修改应用到文件中

我们之前做的所有实验,实际上都没有修改test.txt文件的内容,也就是说我们看到的修改结果仅仅输出到控制台上,而文件test.txt的内容是没有修改的,我们可以使用 -i 选项告诉sed直接修改文件的内容,而不是将修改结果输出到终端上,例如:

sed -i '2d' test.txt 

命令运行之后,我们发现test.txt的第2行没有了


sed正则中的元字符

我们知道sed中的命令前面可以使用地址范围进行限制,表示对文件的某些符合条件的行执行相应的操作,其中我们可以使用正则表达式选出要操作的行,而sed中正则的语法可能与我们其他命令的正则语法有一些不同,这里我们有必要列出sed中常用的正则元字符:

$ 表示行尾 
^ 表示行首
[a-z0-9]表示字符范围
[^]表示除了字符集中的字符以外的字符 
sed的正则中 () 和 {m,n} 需要转义 
. 表示任意字符 
* 表示零个或者多个 
+ 一次或多次 
? 零次或一次 
| 表示或语法

你可能感兴趣的:(收获)