sed学习笔记:
-----------
·一般形式:
操作行范围(行号或模式匹配行范围)-操作符-操作对象-操作结果-行内操作方式
(在操作符前加!号,则对操作行范围外的行进行操作)
简单的例子如下:
[root@localhost ~]# cat grade.log
andy 86 78 99 56
lily 66 70 59 56
lucy 77 78 69 56
steve 82 78 87 56
ann 80 78 90 56
匹配含lucy的行到结尾行之外的行,进行删除操作:
[root@localhost ~]# sed '/lucy/,$!d' grade.log
lucy 77 78 69 56
steve 82 78 87 56
ann 80 78 90 5
匹配含lucy的行到含xx的行,但是由于到结尾行都未匹配到xx的行,所以lucy行后的行都会进行删除操作:
[root@localhost ~]# sed '/lucy/,/xx/d' grade.log
andy 86 78 99 56
lily 66 70 59 56
·分组命令:
对于操作行范围之后的操作符命令可以有多个,多个操作命令使用大括号括起来,多个命令都对操作行范围的行进行操作;
一个简单的例子如下:
[root@localhost ~]# cp grade.log grade.log.bak
对于操作行范围内,进行两个操作:删除含Steve行和修改56为xx:
[root@localhost ~]# sed -i '/lucy/,/xx/{/steve/d;s/56/xx/}' grade.log
[root@localhost ~]# cat grade.log
andy 86 78 99 56
lily 66 70 59 56
lucy 77 78 69 xx
ann 80 78 90 xx
[root@localhost ~]# cat grade.log.bak
andy 86 78 99 56
lily 66 70 59 56
lucy 77 78 69 56
steve 82 78 87 56
ann 80 78 90 56
·sed一般使用的场景:
对于一个文件的多重处理;
对于多个文件的同一套策略处理;
获取范围行,对于相应行进行分别的处理。
·替换操作:
一般形式:
行地址/s/模式/替换符/标识
其中,
分割符:
可以不是/,可以是其他字符,但是选择的分割符,不要是正则表达式符和替换文本内的字符。
替换符:
有几点特殊的字符:
1.&,使用模式匹配部分的内容进行替换;
2.\n,n为数字,代表替换在模式匹配部分第n个“\(”和"\)"括起来的部分;
3.\,作为转义符,也可以转义换行符,从而产生多行的替换符。
标识:
可以为:
1.n(1-512),表示对一行内模式识别到的第几次进行替换处理;
2.g,对于全部模式识别到的,都进行替换处理;
3.p,打印匹配到模式空间的内容;
4.w file,模式空间的内容写入file
针对以上规则的几个例子:
使用#作为分割符:
[root@localhost ~]# echo "/dev/null" |sed 's#/dev/null#devnull#'
devnull
替换符:
使用&替换模式匹配到的字符,加入|plus|便于观察:
[root@localhost ~]# echo "one:two" |sed 's/.*:/&|plus|/'
one:|plus|two
使用\n复制模式匹配的内容作为替换符的一部分(为了便于查看,下例sed使用#作为分割符):
[root@localhost ~]# echo "one:two" |sed 's#\(.*\):\(.*\)#\2:\1#'
two:one
使用\在替换符中进行转义换行符,形成多行输出的例子;(较复杂,只想了解基本内容的话,可跳过)
[root@localhost ~]# cat nseptest.sed
{
s/one/\
\
3lineone/
s/://
s/two/\
\
5linetwo/
s/$/\
/
}
在one前加两行空行,去除:号,在two前加一行空行,在末尾再加入一行空行;
为了便于观察,将sed的结果赋予cat -A以便显示出结尾的$符:
[root@localhost ~]# echo "one:two" |sed -f nseptest.sed |cat -A -
$
$
3lineone$
$
5linetwo$
$
最后,标识符的规则比较简单,例子如下:
[root@localhost ~]# echo "one:two" |sed 's/o/x/g'
xne:twx
[root@localhost ~]# echo "one:two" |sed 's/o/x/2'
one:twx
[root@localhost ~]# echo "one:two" |sed 's/o/x/2w file'
one:twx
[root@localhost ~]# cat file
one:twx
·删除操作:
删除符合要求行,清空模式空间数据,重新读取新的数据行。
几个简单的例子:
[root@localhost ~]# cat grade.log
andy 86 78 99 56
lily 66 70 59 56
lucy 77 78 69 56
steve 82 78 87 56
ann 80 78 90 56
[root@localhost ~]# sed '/lily/,/steve/d' grade.log
andy 86 78 99 56
ann 80 78 90 56
删除空行:
[root@localhost ~]# cat name.log
andy,3233:xx
steve,77899:yy
end,0:z
[root@localhost ~]# sed '/^$/d' name.log
andy,3233:xx
steve,77899:yy
end,0:z
删除Steve以及之后的行:
[root@localhost ~]# sed '/steve/,$d' name.log
andy,3233:xx
·插入,追加,修改操作:
插入和追加操作只能对单行进行操作;而且加入的行对模式空间没有影响,也不会执行后面的执行语句。
修改操作可以对多行进行操作,相当于先将匹配的多行删除,然后,替换为输入数据。
一个综合的例子:
在含andy行前加入“insertline”;在含末尾行后追加“appendline”;将含82数据行,替换为“82changeline”:
[root@localhost ~]# sed -e '/andy/i insertline' -e '$a appendline' -e '/82/c 82changeline' grade.log
insertline
andy 86 78 99 56
lily 66 70 59 56
lucy 77 78 69 56
82changeline
ann 80 78 90 56
appendline
[root@localhost ~]# cat grade.log
andy 86 78 99 56
lily 66 70 59 56
lucy 77 78 69 56
steve 82 78 87 56
ann 80 78 90 56
·转换操作:
进行字符的转换操作,注意此操作和单词无关,只是相应位置的字符和字符的转换:
[root@localhost ~]# echo aBcde|sed 'y/abc/XYZ/'
XBZde
·next命令:
将模式空间的行移除,输入下一行,进行下一个执行命令;(和awk的next操作类似)
此操作改变了sed正常的控制流(读入一行,全部语句执行完成,再读取下一行);
产生的结果就是模式空间中的行,不再执行next之后的语句;读入的下一行,不会执行next之前的语句。
一个简单的例子:
将含“Steve”行后面的空行删除:
[root@localhost ~]# cat name.log
andy,3233:xx
steve,77899:yy
empty
end,0:z
[root@localhost ~]# sed '/steve/{n;/^$/d}' name.log
andy,3233:xx
steve,77899:yy
empty
end,0:z
#注意:empty行后面的空行未删除。
·读入文件,写入文件操作:
读入文件(r):适用于要将一个文件系统插入另一文件的特定行的情况:
写入文件(w):适用于将匹配行,分别写入单独文件的情况。
读入例子如下:
使用filename文件内的内容插入到FILENAME行后,此外可以删除FILENAME行:
[root@localhost ~]# sed -e '/FILENAME/r filename' -e '/FILENAME/d' grade.log
grade.log
andy 86 78 99 56
lily 66 70 59 56
lucy 77 78 69 56
steve 82 78 87 56
ann 80 78 90 56
[root@localhost ~]# cat filename
grade.log
[root@localhost ~]# cat grade.log
FILENAME
andy 86 78 99 56
lily 66 70 59 56
lucy 77 78 69 56
steve 82 78 87 56
ann 80 78 90 56
写出例子如下:
[root@localhost ~]# sed -e '/Sales/w salelist.log' -e '/Support/w suptlist.log' employees.txt
Emma Thomas:100:Sales
Alex Jason:200:Sales
Madison Randy:300:Support
Sanjay Gupta:400:Support
Nisha Singh:500:Sales
[root@localhost ~]# cat salelist.log
Emma Thomas:100:Sales
Alex Jason:200:Sales
Nisha Singh:500:Sales
[root@localhost ~]# cat suptlist.log
Madison Randy:300:Support
Sanjay Gupta:400:Support
[root@localhost ~]#
退出操作命令:
用于对于大文件进行操作,操作后即返回,不再继续查找以节省时间:
节省时间的例子如下:
[root@localhost ~]# time sed '10q' /var/log/anaconda.log
10:11:15 INFO : 515308 kB are available
...
10:11:16 INFO : loaded nfs_acl from /modules/modules.cgz
real 0m0.184s
user 0m0.000s
sys 0m0.017s
[root@localhost ~]# time sed -n '1,10p' /var/log/anaconda.log
10:11:15 INFO : 515308 kB are available
...
10:11:16 INFO : loaded nfs_acl from /modules/modules.cgz
real 0m0.525s
user 0m0.005s
sys 0m0.026s
当然,正常场景可能是匹配查找关键字,然后退出。
分享到:
相关推荐
包括sed-4.2.1-setup.exe、sed-4.2.1-dep.zip、sed-4.2.1-bin.zip
sed-4.2.1-setup.exe window下可以使用
官方离线安装包,亲测可用。使用rpm -ivh [rpm完整包名] 进行安装
描述: sed,主要用于匹配文件,以前下载过的,现在主要是为了分享一下吧,另外作为自己的资源保存一下
linux下面的文本编辑工具sed,非常强大,现在windows版本的sed已出
prompt$ sedsed --help usage: sedsed OPTION [-e sedscript] [-f sedscriptfile] [inputfile] OPTIONS: -f, --file add file contents to the commands to be parsed -e, --expression add the script to the ...
解决webstrom rpx带空格问题。网上有很多说让用sed.exe。我最先下载的sed.4.21.exe此版本一点用都没有。踩坑很久。只有这个版本的真的有效的。
sed命令的详细介绍,对于需要使用脚本的童鞋会比较有帮助
Sed学习笔记
Vim-101-hacks、Sed-and-Awk-101-Hacks、Linux-101-hacks 英文版(高清)PDF
linux shell Sed学习笔记.相信你看完会明白的
sed 在windows下的工具, 适用于进行windows使用,方便在外网不支持的情况下下载。在编译qt WebAssembly demo的时候用到了。
python库。资源全名:sed_creator-0.1.14-py3-none-any.whl
The book begins with an overview and a tutorial that demonstrate a progression in functionality from grep to sed to awk. sed and awk share a similar command-line syntax, accepting user instructions in...
sed学习笔记,很好的总结,在其它地方淘到的,和大家分享
sed与awk(第二版)学习笔记
官方离线安装包,亲测可用
Python库是一组预先编写的代码模块,旨在帮助开发者实现特定的编程任务,无需从零开始编写代码。这些库可以包括各种功能,如数学运算、文件操作、数据分析和网络编程等。Python社区提供了大量的第三方库,如NumPy、...