Linux命令之sed命令使用介绍
sed是lux轻量级流编辑器,用于行的操作,主要用来数据的选取、替换、删除、新增等。从输入文件中一次一行的读取,
按顺序将列表中的命令应用到每一行,并将其编辑过的行,写到标准输出。
权 限所有用户
位 置/b/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动作写在一个文件内,-f file 则可以执行filename内的sed动作
-r
sed的动作支持扩展的正则表达式(默认支持基础正则表达式)
-i
直接修改读取的文件内容
注意多个选项参数一起用的时候,例如sed -i -r ... 不可以这样sed -ir ...
动作说明[n1[,n2]] function
不见得会存在,一般代表选择动作的行数,如果动作是在5到15行之间进行替换,则"10,20c"
a 新增,当前行的下一行
sed '2a hello world' file 输出在第2行之后插入hello world
sed '2a hello world\
my name is csdn' file
输出在2行下面插入两行分别为hello world 和my name is scdn
特别注意hello world 后面的"\"
c 替换,是整行替换
sed '3,6c hello csdn' file
输出把3至6行的只替换为 hello csdn(第3至6行只剩下一行hello csdn,不是3至6行的每一行都为hello csdn)
d 删除
sed '3,6d' file 输出删除file的3至6行之后的内容
i 插入,当前行的上一行
与a动作类似,参照a动作用法
p 打印
sed -n '2,5p' file 打印file的第2至5行
s 替换
sed 's/oldStrg/newStrg/g' file oldStrg和newStrg支持基础正则表达式和扩展的正则表达式
cat -n ngx | sed '1,99s/[0-9]\{1,\}\.[0-9]\{1,\}\.[0-9]\{1,\}\.[0-9]\{1,\}//g' 把ngx日志的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,200 65,-,XMP Wdows Client 4.9,-,ed2k://|file|ki141213.wmv|1119747351|914EBB2FD551844CBE15513C0126E6EE|h,00E04C377725NG4E,ki141213.wmv,1119747351 92 - - [15/Dec/2014:23:00:10 +0800],GET /identified? HTTP/1.1,401 112,-,-,-,-,-,-,- 93 - - [15/Dec/2014:23:00:10 +0800],GET /identified? HTTP/1.1,401 112,-,-,-,-,-,-,- 94 - - [15/Dec/2014:23:00:10 +0800],GET /identified? HTTP/1.1,401 112,-,-,-,-,-,-,- 95 - - [15/Dec/2014:23:00:10 +0800],-,400 0,-,-,-,-,-,-,- 96 - - [15/Dec/2014:23:00:10 +0800],GET /identified?key=this-is-TMP-apikey&digest=76BB7C854168DCD1BF15FCB92E4114FFD4CFE7DE&digest-algorithm=mag&hash=28003498535& HTTP/1.1,200 65,-,Thunder Wdows Client 7.9,-,mag:?xt=urn:btih:76BB7C854168DCD1BF15FCB92E4114FFD4CFE7DE,EC55F9E92A5212LQ,ABP-209R,1067178826 97 - - [15/Dec/2014:23:00:10 +0800],GET /identified? HTTP/1.1,401 112,-,-,-,-,-,-,- 98 - - [15/Dec/2014:23:00:10 +0800],GET /identified? HTTP/1.1,401 112,-,-,-,-,-,-,- 99 - - [15/Dec/2014:23:00:10 +0800],-,400 0,-,-,-,-,-,-,- 100 121.12.57.154 - - [15/Dec/2014:23:00:10 +0800],GET /identified? HTTP/1.1,401 112,-,-,-,-,-,-,-
动作其他用法1sed '/模式/动作' 文件
可以指定某种模式的行进行动作操作,如下(这里的文件名是a,注意cat a的输出)
1、以p开头的行前加[TAB]
$ cat a pa:11:a sa:32:c app:5:b stort:1:d pear:4:aa hello:3:f $ sed '/^p/s/^/\t/' a pa:11:a sa:32:c app:5:b stort:1:d pear:4:aa hello:3:f
2、删除以a开头的行,(那么下面的输出,以a开头的行就没了)
$ sed '/^a/d' a pa:11:a sa:32:c stort:1:d pear:4:aa hello:3:f3、反向匹配(文件a中,输出只保留了a开头的行)
$ sed '/^a/!d' a app:5:b
4、等价与grep -v (输出文件a中,非p字母开头的行)
$ grep -v '^h' a pa:11:a sa:32:c app:5:b stort:1:d pear:4:aa $ sed -n '/^h/!p' a pa:11:a sa:32:c app:5:b stort:1:d pear: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,则直接修改文件
网络推广
- 5g网络有多快:5g网络网速有多快
- dota2无法连接至steam网络 为什么无法连接dota2网络
- 无线网络信号接收器 无线网络信号接收器怎么用
- 网络延时是什么意思 网络延时是什么原因
- 无线网络不可用:无线网络不可用是什么原因
- 网络广告销售技巧 网络广告销售技巧有哪些
- 智能手机网络设置 智能手机网络设置在哪里
- 为什么找不到无线网络 为什么找不到无线网络信
- 网络这么赚钱:网络怎么能赚到钱
- 为什么无线网络连接不上 为什么无线网连不起来
- 网络上的人际交往 网络上人际交往的优势
- 支付宝网络系统异常 支付宝显示网络异常什么时
- 营销软件:营销软件有哪些
- 无法访问您要使用的功能所在的网络位置
- 网络安全基本知识 网络安全基本知识有哪些
- 什么网络电话最好用 什么网络电话最好用最便宜