Linux命令行操作之sed
2022-11-22 · 百度认证:北京一天天教育科技有限公司官方账号,教育领域创作者
sed命令行格式:sed [options] 'command' file(s)
options常用选项:
-n或--quiet或——silent:仅显示script处理后的结果;
-e:以选项中的指定的script来处理输入的文本文件;
-f:以选项中指定的script文件来处理输入的文本文件;
-r∶sed 的动作支援的是延伸型正规表示法的语法;
-i∶直接修改读取的档案内容,而不是由萤幕输出;
-h或--help:显示帮助;
-V或--version:显示版本信息。
Command常用命令:
a:新增,a 的后面可以接字符串,而这些字符串会在新的一行出现(目前的下一行);
c:取代,c 的后面可以接字符串,这些字符串可以取代 n1.n2 之间的行;
d:删除,d 后面通常不接任何字符串;
i:插入,i 的后面可以接字符串,而这些字符串会在新的一行出现(目前的上一行);
p:列印,亦即将某个选择的资料印出。通常 p 会与参数 sed -n 一起运作;
s:取代,可以直接进行取代的工作,通常与正规表达式搭配使用。
实例说明:
新增操作:a命令
sed '/^bird/a\test' file将test追加到 以bird开头的行后面
删除操作:d命令
sed '/^$/d' file #删除空白行;
sed '2d' file #删除第二行;
sed '2.$d' file #删除第2行到最后一行;
sed '$d' file #删除最后一行;
sed '/^bird/'d file #删除所有开头是bird的行;
插入操作:i命令
sed -i '3i\bird ' bird.conf #在bird.conf文件第3行之前插入bird
替换文本中的字符串:s命令
sed 's/bird/birds/' file #将文本中的bird替换成birds;
sed -i 's/ bird / birds /g' file #将file文件中每一行的第一个bird替换为birds;
sed "stream editor",字符流编辑器,按行处理文件,把正在处理的行保存到一个临时缓冲区,处理完数据后,把结果发送到屏幕,并删除缓存内容。不消耗内存,但耗时。
sed -n '2p' 只打印第二行。p为print。-n为只打印指定内容
sed -n '/asdf/,/saf/p' file 打印两者匹配之间的所有行
-n 和p同时出现
sed -n '2,/abc/p' file 打印从第2行到匹配到abc的行
删除空行:sed '/^ 行尾
删除只有空格行:sed '/^ +$d' file
将A开始的行震撼替换成NA:sed 's/^A.*$/NA/g' file
匹配次数
示例:
sed -n '/^jiayou[a-zA-Z]*/p' file
sed -n '/^jiayou[a-z]?/p' file 匹配以jiyou开始,后面跟0个或1个小写字母
sed -n '/(123){2}/p' datafile.txt 打印连续出现两次的行。进行分组。
去掉太多转义符,sed -r -n '/(123){2}/p' datafile.txt
sed '[address]d' file 删除命令
sed '4,8d' file
sed '4,$d' datafile 删除第4行到最后一行
sed 's/abc/ABC/' file提每一行第一次匹配进行替换
sed '2,5s/abc/ABC/' datafile对2-5行范围第一次匹配进####行替换
sed 's:abc:ABC' file 修改定界符
sed -n 's/abc/ABC/gp' file只打印替换的行
sed -n 's/abc/ABC/i' file 替换时忽略大小写
sed '3i abc' file 第三行前插入文本
sed '3a ABC' file第三行后追加文本
sed '3c ABC' file 替换第三行内容
sed '3,6c abc' file替换指定范围的行换成一行内容sed sed '3i ABC ENF\nAAAA bbbb' datafile.txt
对同一文件使用多条命令: sed -e
sed -r 不用加转义符号
sed -f script.file datafile 把命令写入文件,-f执行文件内操作
sed -n 取消默认输出
sed -i 直接修改输入文件内容,而不是输出到终端
sed -r 使用扩展正则表达式
sed -n '/abc/, 表示最后一行,不是正则表达式的$
sed -n '/abc/!p' datafile 不匹配abc的行!表否定
sed -n '1!p' datafile 不打印第一行
sed -n '1,3!p' datafile 不答应第1,3行
**