Linux命令之sed命令使用介绍linux的sed命令详解




Linux命令之sed命令使用介绍linux的sed命令详解

2022-07-20 20:26:51 网络知识 官方管理员

sed是linux轻量级流编辑器,用于行的操作,主要用来数据的选取、替换、删除、新增等。从输入文件中一次一行的读取,

按顺序将列表中的命令应用到每一行,并将其编辑过的行,写到标准输出。

权限:所有用户

位置:/bin/sed

用法:sed[-nefr][动作]file

参数:

-n

不加-n的时候,sed处理的数据和不处理的都会输出,加上-n只会输出sed操作的行,

注意:与动作p和起来用,不要与其他动作一起用

-e

直接在命令行模式上进行sed的动作编辑

例如:sed-e's/aaa/b/g;s/aa/b/g'file也即多个动作同时操作,注意中间的分号

-f

直接将sed动作写在一个文件内,-ffile则可以执行filename内的sed动作

-r

sed的动作支持扩展的正则表达式(默认支持基础正则表达式)

-i

直接修改读取的文件内容

注意:多个选项参数一起用的时候,例如:sed-i-r...不可以这样:sed-ir...

动作说明:[n1[,n2]]function

不见得会存在,一般代表选择动作的行数,如果动作是在5到15行之间进行替换,则"10,20c"

a新增,当前行的下一行

sed'2ahelloworld'file输出在第2行之后插入helloworld

sed'2ahelloworld\

mynameiscsdn'file

输出在2行下面插入两行分别为helloworld和mynameisscdn

特别注意helloworld后面的"\"

c替换,是整行替换

sed'3,6chellocsdn'file

输出把3至6行的只替换为hellocsdn(第3至6行只剩下一行hellocsdn,不是3至6行的每一行都为hellocsdn)

d删除

sed'3,6d'file输出删除file的3至6行之后的内容

i插入,当前行的上一行

与a动作类似,参照a动作用法

p打印

sed-n'2,5p'file打印file的第2至5行

s替换

sed's/oldString/newString/g'fileoldString和newString支持基础正则表达式和扩展的正则表达式

cat-nnginx|sed'1,99s/[0-9]\{1,\}\.[0-9]\{1,\}\.[0-9]\{1,\}\.[0-9]\{1,\}//g'把nginx日志的1至99行的第一个字段IP地址替换为空

结果为:

91--[15/Dec/2014:23:00:10+0800],GET/identified?key=this-is-TMP-apikey&digest=914EBB2FD551844CBE15513C0126E6EE&digest-algorithm=ed2k&hash=9D37BB2988F26973371FAB028FEEEB93D5542300&HTTP/1.1,20065,-,XMPWindowsClient4.9,-,ed2k://|file|ki141213.wmv|1119747351|914EBB2FD551844CBE15513C0126E6EE|h,00E04C377725NG4E,ki141213.wmv,111974735192--[15/Dec/2014:23:00:10+0800],GET/identified?HTTP/1.1,401112,-,-,-,-,-,-,-93--[15/Dec/2014:23:00:10+0800],GET/identified?HTTP/1.1,401112,-,-,-,-,-,-,-94--[15/Dec/2014:23:00:10+0800],GET/identified?HTTP/1.1,401112,-,-,-,-,-,-,-95--[15/Dec/2014:23:00:10+0800],-,4000,-,-,-,-,-,-,-96--[15/Dec/2014:23:00:10+0800],GET/identified?key=this-is-TMP-apikey&digest=76BB7C854168DCD1BF15FCB92E4114FFD4CFE7DE&digest-algorithm=magnet&hash=28003498535&HTTP/1.1,20065,-,ThunderWindowsClient7.9,-,magnet:?xt=urn:btih:76BB7C854168DCD1BF15FCB92E4114FFD4CFE7DE,EC55F9E92A5212LQ,ABP-209R,106717882697--[15/Dec/2014:23:00:10+0800],GET/identified?HTTP/1.1,401112,-,-,-,-,-,-,-98--[15/Dec/2014:23:00:10+0800],GET/identified?HTTP/1.1,401112,-,-,-,-,-,-,-99--[15/Dec/2014:23:00:10+0800],-,4000,-,-,-,-,-,-,-100121.12.57.154--[15/Dec/2014:23:00:10+0800],GET/identified?HTTP/1.1,401112,-,-,-,-,-,-,-

动作其他用法1:sed'/模式/动作'文件

可以指定某种模式的行进行动作操作,如下(这里的文件名是a,注意cata的输出):

1、以p开头的行前加[TAB]

$catapa:11:asa:32:capp:5:bstort:1:dpear:4:aahello:3:f$sed'/^p/s/^/\t/'apa:11:asa:32:capp:5:bstort:1:dpear:4:aahello:3:f
2、删除以a开头的行,(那么下面的输出,以a开头的行就没了)

$sed'/^a/d'apa:11:asa:32:cstort:1:dpear:4:aahello:3:f3、反向匹配(文件a中,输出只保留了a开头的行)

$sed'/^a/!d'aapp:5:b

4、等价与grep-v(输出文件a中,非p字母开头的行)

$grep-v'^h'apa:11:asa:32:capp:5:bstort:1:dpear:4:aa$sed-n'/^h/!p'apa:11:asa:32:capp:5:bstort:1:dpear:4:aa

动作其他用法2:

也可以使用成对的正则表达式或行号与正则表达式的结合,来选取一定范围的行,如下:

1、sed'1,3d'file删除1至3行

2、sed-n'1,3p'file打印1至3行

3、sed'1,/^$/d'file删除范围:第一行至第一个空行(注意格式)

4、sed'/^$/,/^app/d'file删除范围:第一个空行至以app开头的行

5、sed'$d'file删除最后一行

注意:反向匹配行,是动作前加感叹号(!d!s!c等等)


如果前面的命令直接加入-i,则直接修改文件

发表评论:

最近发表
网站分类
标签列表