linux sed 命令常见用法

在 linux 系统中,有三个强大的文本分析处理工具:grep  sed  awk,其中:

grep   用于搜索文本内容      =>     linux grep 命令常见用法

sed    用于编辑文本内容       =>     linux sed  命令常见用法

awk   用于处理和生成报表    =>     linux awk 命令常见用法

 

这几个命令用来对数据流进行处理的,其工作原理都是将文件内容逐行读入,逐行处理。

sed 的全称是 “stream editor” (数据流编辑器),从这个名字也可以看出,sed 是以数据流的方式对文本内容进行编辑的,而最常见的用法就是对文本中的特定字符串进行替换或者删除,下面结合实例简单介绍 sed 命令的常见用法:

假设文件 fin.txt 中的内容如下:

hello Jobs
hello Pony hello Jack, hi Jack

1. 把每一行中的 Jack 替换成 Mark

sed  's/Jack/Mark/'  fin.txt
>> hello Jobs hello Pony hello Mark, hi Jack

sed 命令一般是写在单引号内,引号内开头的 s 表示替换(substitute),

需要注意的是,在默认情况下,sed 只会替换每行中匹配到的第一个字符串,所以上面例子中最后一行的第二个 Jack 没有被替换,如果希望替换每一行中所有匹配到的字符串,需加在命令末尾上选项 g,比如:

sed  's/Jack/Mark/g'  fin.txt
>>
hello Jobs
hello Pony
hello Mark, hi Mark

注意这条命令并不会修改文件 fin.txt 的内容,只是将文件中的每一行读入缓存,执行替换,然后输出到屏幕,文件内容并没有发生改变。

如果希望直接修改文件内容,可加上选项 “ -i ”

sed -i 's/Jack/Mark/g' fin.txt

2. 将 2~3 行中的 hello 替换成 hey

sed  '2,3s/hello/hey/g'  fin.txt
>>
hello Jobs
hey   Pony
hey   Jack,  hi Jack

这条命令开头的 2,3 表示仅在第 2 至第 3 行执行替换

 

3. 找出包含字符 Pony 的那些行,将这些行中的 hello 替换成 hey

sed  '/Pony/s/hello/hey/g'  fin.txt
>>
hello Jobs
hey   Pony
hello Jack, hi Jack

这里的 Pony 是正则表达式,所以需要用 // 括起来

 

4. 删除 2~3 行

sed  '2,3d'  fin.txt
>>
hello Jobs

命令中的 d 表示删除(delete),执行之后第 2~3 行就被删除了,仅剩下第一行

5. 删除包含字符串 Pony 的行

sed  '/Pony/d'  fin.txt
>>
hello Jobs
hello Jack, hi Jack

这里的 Pony 也是正则表达式,所以用 // 括起来了

6. 删除空白行

sed  '/^$/d'  fin.txt

这里的 ^ 匹配一行的开头, $ 匹配一行的结尾,所以 /^$/ 就表示一行的开头和结尾之间没有任何内容,也就是空白行;

注意有时候有些空白行是包含空格的,这种情况就需要写成:

sed  '/^s*$/d'  fin.txt

其中 s 表示空格, 星号 * 表示前面的字符重复 0 次或多次,所以这种写法可以匹配那些包含任意个空格的空白行

 

7. 删除不包含字符 Pony 的行

sed  '/Pony/!d'  fin.txt

这里的感叹号 ! 表示反选,也就是选择那些不符合正则表达式 /Pony/ 的行, 右斜杠表示转义, 因为在有些系统下 ! 会被识别成其他的意思

 

8. 在指定某一行的前面或者后面添加一行

sed -i '1iwelcome'  fin.txt
>>
welcome
hello Jobs
hello Pony
hello Jack,  hi Jack

 这里的 1 表示第一行, i 表示在这一行前面添加一行,如果要在第一行后面添加一行,则用字母 a :

sed -i  '1awelcome'  fin.txt

字母 a 是 append ,在后面添加一行

字母 i  是 insert, 在前面添加一行

9. 在匹配行的前面或者后面添加一行

sed -i  '/Pony/awelcome'  fin.txt
>>
hello Jobs
hello Pony
welcome
hello Jack,  hi Jack

 同样,在后面添加一行用字母 a,在前面添加一行用字母 i

sed -i  '/Pony/iwelcome'  fin.txt

以上只是 sed 的常见用法,sed 的用法其实还有很多,

如果希望深入了解,建议参考相关书籍或者直接访问 GNU sed 网站:

 http://www.gnu.org/software/sed/manual/sed.html

 

 

 

 

|--------------------------------------|

  

原文地址:https://www.cnblogs.com/xiaoxie2014/p/12911241.html