sed --help
-n 禁止自动打印图案空间
-e 将脚本添加到要执行的命令中
-f 将脚本文件的内容添加到要执行的命令中
-i 直接进行编辑文件(如果编辑文件时代后缀名,则进行备份文件)
-c 在-i模式下整理文件时使用复制而不是重命名
-b 以二进制模式打开文件
-l 为“l”命令指定所需的换行长度
-r 在脚本中使用扩展正则表达式
-s 将文件视为独立的,而不是单个连续的内容。
-u 从输入文件加载最少数量的数据,并更频繁地刷新输出缓冲区
-z 按nul字符进行分隔行
————————————————华丽的分割线————————————
sed元字符集内容:
^ 匹配行开始
$ 匹配行结束
. 匹配一个非换行符的任意字符
* 匹配0个或多个字符
[] 匹配一个指定范围内的字符
[^] 匹配一个不再指定范围内的字符
& 保存搜索字符串,用来替换其他
\< 匹配单词的开始
\> 匹配单词的结束
————————————————华丽的分割线————————————
好开始内容测试,为了方便测试,我们先创建一个供测试使用的文件
vi sedtest1.txt,编辑如下内容
vi sedtest1.txt
sed '/^$/d' sedtest1.txt
cat sedtest1.txt
咦?文件怎么没有修改呢?还记得我们之前的参数吗?直接对文件进行修改需要添加参数是什么来着?对是-i的。
sed -i '/^$/d' sedtest1.txt
看到了吧,文件已经成功修改。也就是说,在使用sed的删除命令时,如果不加-i参数的话,只是当前显示的内容删除了,而并未进行文件的修改操作!!!好,那为了演示效果,我们后面就直接对文件动手了!!!!
我们先按行数显示查看文件内容
cat -n sedtest1.txt
sed -i '4d' sedtest1.txt
再次查看文件内容
cat -n sedtest1.txt
目前的最后一行是ccc内容
sed -i '$d' sedtest1.txt
然后查看文件
cat sedtest1.txt
sed -i '5,$d' sedtest1.txt
查看执行结果
cat -n sedtest1.txt
删除文件中所有开头内容是22的行
sed -i '^22/' d sedtest1.txt
查看处理后的文件情况:
cat sedtest1.txt
sed -i 's/3/8/' sedtest2.txt
sed -i 's/3/8/g' sedtest2.txt
sed -i 's/1/9/5g' sedtest2.txt
sed -n 'p;n' sedtest3.txt
sed -n 'n;p' sedtest3.txt
我们来使用创建的第四个文件。
cat -n sedtest4.txt
sed -i "1i skyfans good teacher" sedtest4.txt
sed -i '$a This is the last line' sedtest4.txt
cat -n sedtest4.txt