今天我们继续来学习每天一个命令,今天我们继续学习章节内容:查找类命令(SEARCH),这章里将包括我们运维常用的三剑客内容,今天学习的是什么命令呢,那就是sed(文本处理工具)。
sed --help
-n 禁止自动打印图案空间
-e 将脚本添加到要执行的命令中
-f 将脚本文件的内容添加到要执行的命令中
-i 直接进行编辑文件(如果编辑文件时代后缀名,则进行备份文件)
-c 在-i模式下整理文件时使用复制而不是重命名
-b 以二进制模式打开文件
-l 为“l”命令指定所需的换行长度
-r 在脚本中使用扩展正则表达式
-s 将文件视为独立的,而不是单个连续的内容。
-u 从输入文件加载最少数量的数据,并更频繁地刷新输出缓冲区
-z 按nul字符进行分隔行
————————————————华丽的分割线————————————
sed元字符集内容:
^ 匹配行开始
$ 匹配行结束
. 匹配一个非换行符的任意字符
* 匹配0个或多个字符
[] 匹配一个指定范围内的字符
[^] 匹配一个不再指定范围内的字符
& 保存搜索字符串,用来替换其他
\< 匹配单词的开始
\> 匹配单词的结束
————————————————华丽的分割线————————————
好开始内容测试,为了方便测试,我们先创建一个供测试使用的文件
vi sedtest1.txt,编辑如下内容
vi sedtest1.txt
然后我们把这个文件复制4份。
为了先使文件里的内容规整下,我们先讲关于删除类的命令
1.删除
1.1.删除空白行
sed '/^$/d' sedtest1.txt
我们来查看下文件是否已经修改
cat sedtest1.txt
咦?文件怎么没有修改呢?还记得我们之前的参数吗?直接对文件进行修改需要添加参数是什么来着?对是-i的。
sed -i '/^$/d' sedtest1.txt
看到了吧,文件已经成功修改。也就是说,在使用sed的删除命令时,如果不加-i参数的话,只是当前显示的内容删除了,而并未进行文件的修改操作!!!好,那为了演示效果,我们后面就直接对文件动手了!!!!
1.2删除指定的行数
我们先按行数显示查看文件内容
cat -n sedtest1.txt
1.2.1 删除第四行内容
sed -i '4d' sedtest1.txt
再次查看文件内容
cat -n sedtest1.txt
我们发现原来的第四行11111已经被删除了。
1.2.2 删除最后一行
目前的最后一行是ccc内容
sed -i '$d' sedtest1.txt
然后查看文件
cat sedtest1.txt
已经成功删除了最后一行的内容。
1.2.3 删除第五行到第七行的内容(注意第一个数字代表从第几行开始!)
sed -i '5,$d' sedtest1.txt
查看执行结果
cat -n sedtest1.txt
1.2.4 删除指定内容的行
删除文件中所有开头内容是22的行
sed -i '^22/' d sedtest1.txt
查看处理后的文件情况:
cat sedtest1.txt
好,第一个文件就玩到这里!!!!
2.替换操作
这次我们来玩第二个文件,第一个文件已经被玩坏了,哈哈!
2.1替换文件里的3为8(只匹配替换查找到的第一个字符)
sed -i 's/3/8/' sedtest2.txt
咦,又发现了奇怪的问题了,怎么只替换了每行的第一个字符呢?
2.2全部替换,把文件中的3全部替换为8
sed -i 's/3/8/g' sedtest2.txt
这回全部替换了吧!
2.3从第N处开始之后的内容全部替换
sed -i 's/1/9/5g' sedtest2.txt
3.奇偶行查看
3.1奇数行查看
sed -n 'p;n' sedtest3.txt
3.2偶数行查看
sed -n 'n;p' sedtest3.txt
4.在指定行内插入内容
我们来使用创建的第四个文件。
cat -n sedtest4.txt
4.1 在第一行插入skyfans good teacher字符内容
sed -i "1i skyfans good teacher" sedtest4.txt
可以看到已经成功的插入到第一行了。
4.2 在最后一行插入 This is the last line
sed -i '$a This is the last line' sedtest4.txt
cat -n sedtest4.txt
可以看到已经成功的追加到最后一行了。