skyfans之每天一个Liunx命令系列之四十六:sed

今天我们继续来学习每天一个命令,今天我们继续学习章节内容:查找类命令(SEARCH),这章里将包括我们运维常用的三剑客内容,今天学习的是什么命令呢,那就是sed(文本处理工具)。

sed --help

skyfans之每天一个Liunx命令系列之四十六:sed_第1张图片
-n 禁止自动打印图案空间
-e 将脚本添加到要执行的命令中
-f 将脚本文件的内容添加到要执行的命令中
-i 直接进行编辑文件(如果编辑文件时代后缀名,则进行备份文件)
-c 在-i模式下整理文件时使用复制而不是重命名
-b 以二进制模式打开文件
-l 为“l”命令指定所需的换行长度
-r 在脚本中使用扩展正则表达式
-s 将文件视为独立的,而不是单个连续的内容。
-u 从输入文件加载最少数量的数据,并更频繁地刷新输出缓冲区
-z 按nul字符进行分隔行
————————————————华丽的分割线————————————

sed元字符集内容:
^ 匹配行开始
$ 匹配行结束
.  匹配一个非换行符的任意字符
* 匹配0个或多个字符
[] 匹配一个指定范围内的字符
[^] 匹配一个不再指定范围内的字符
& 保存搜索字符串,用来替换其他
\<  匹配单词的开始
\>  匹配单词的结束

————————————————华丽的分割线————————————
好开始内容测试,为了方便测试,我们先创建一个供测试使用的文件
vi sedtest1.txt,编辑如下内容

vi sedtest1.txt

skyfans之每天一个Liunx命令系列之四十六:sed_第2张图片
然后我们把这个文件复制4份。
skyfans之每天一个Liunx命令系列之四十六:sed_第3张图片

为了先使文件里的内容规整下,我们先讲关于删除类的命令

1.删除

1.1.删除空白行

sed '/^$/d'  sedtest1.txt

skyfans之每天一个Liunx命令系列之四十六:sed_第4张图片
我们来查看下文件是否已经修改

cat sedtest1.txt

skyfans之每天一个Liunx命令系列之四十六:sed_第5张图片
咦?文件怎么没有修改呢?还记得我们之前的参数吗?直接对文件进行修改需要添加参数是什么来着?对是-i的。

sed -i '/^$/d' sedtest1.txt

skyfans之每天一个Liunx命令系列之四十六:sed_第6张图片
看到了吧,文件已经成功修改。也就是说,在使用sed的删除命令时,如果不加-i参数的话,只是当前显示的内容删除了,而并未进行文件的修改操作!!!好,那为了演示效果,我们后面就直接对文件动手了!!!!

1.2删除指定的行数

我们先按行数显示查看文件内容

cat -n sedtest1.txt

skyfans之每天一个Liunx命令系列之四十六:sed_第7张图片

1.2.1 删除第四行内容

sed -i '4d' sedtest1.txt

再次查看文件内容

cat -n sedtest1.txt

skyfans之每天一个Liunx命令系列之四十六:sed_第8张图片
我们发现原来的第四行11111已经被删除了。

1.2.2 删除最后一行

目前的最后一行是ccc内容

sed -i '$d' sedtest1.txt

然后查看文件

cat sedtest1.txt

skyfans之每天一个Liunx命令系列之四十六:sed_第9张图片
已经成功删除了最后一行的内容。

1.2.3 删除第五行到第七行的内容(注意第一个数字代表从第几行开始!)

sed -i '5,$d' sedtest1.txt

查看执行结果

cat -n sedtest1.txt

skyfans之每天一个Liunx命令系列之四十六:sed_第10张图片

1.2.4 删除指定内容的行

删除文件中所有开头内容是22的行

sed -i '^22/' d sedtest1.txt

查看处理后的文件情况:

cat sedtest1.txt

skyfans之每天一个Liunx命令系列之四十六:sed_第11张图片
好,第一个文件就玩到这里!!!!

2.替换操作

这次我们来玩第二个文件,第一个文件已经被玩坏了,哈哈!
skyfans之每天一个Liunx命令系列之四十六:sed_第12张图片

2.1替换文件里的3为8(只匹配替换查找到的第一个字符)

sed -i 's/3/8/' sedtest2.txt

skyfans之每天一个Liunx命令系列之四十六:sed_第13张图片
咦,又发现了奇怪的问题了,怎么只替换了每行的第一个字符呢?

2.2全部替换,把文件中的3全部替换为8

sed -i 's/3/8/g' sedtest2.txt

skyfans之每天一个Liunx命令系列之四十六:sed_第14张图片
这回全部替换了吧!

2.3从第N处开始之后的内容全部替换

sed -i 's/1/9/5g' sedtest2.txt

skyfans之每天一个Liunx命令系列之四十六:sed_第15张图片

3.奇偶行查看

3.1奇数行查看

sed -n 'p;n' sedtest3.txt

skyfans之每天一个Liunx命令系列之四十六:sed_第16张图片

3.2偶数行查看

sed -n 'n;p' sedtest3.txt

skyfans之每天一个Liunx命令系列之四十六:sed_第17张图片

4.在指定行内插入内容

我们来使用创建的第四个文件。

cat -n  sedtest4.txt

4.1 在第一行插入skyfans good teacher字符内容

sed -i "1i skyfans good teacher" sedtest4.txt

skyfans之每天一个Liunx命令系列之四十六:sed_第18张图片
可以看到已经成功的插入到第一行了。

4.2 在最后一行插入 This is the last line

sed -i '$a This is the last line' sedtest4.txt
cat -n  sedtest4.txt

skyfans之每天一个Liunx命令系列之四十六:sed_第19张图片
可以看到已经成功的追加到最后一行了。

你可能感兴趣的:(基础命令系列,linux基础命令系列)