sed命令

1 命令介绍

sed 是一种在线编辑器,它一次处理一行内容,功能同awk类似,差别在于,sed简单,对列处理的功能要差一些

默认不编辑原文件,仅对模式空间中的数据做处理。除非你使用重定向存储输出

1.1  选项和参数

sed [-nefr] [操作]

选项与参数

    -n:使用安静模式,不适用-n会重复打印,比如sed -n '5,7p',不加n就会重复

    -e:直接在命令行模式上进行sed的操作编辑

    -f:直接将sed的操作写入文件中

    -r:sed的操作为扩展正则表达式的语法

    -i:直接修改读取的文件内容,修改前最后先检查

操作说明:[n1,n2] function

        n1, n2 :不见得会存在,一般代表『选择进行动作的行数』

a:新增,a后面接字符为新增行内容(当前的下一行),sed '2a Hello' 在第2行下加Hello

c:替换,c后面可以接字符,直接替换当行内容

d:删除,比如sed '2,5d',删除2-5行

i:插入,当前的上一行

p:打印,比如sed -n '5,7p',打印5-7行

s:替换,比如sed 's/要被替换的字符/新的字符/g'

替换标记
g 表示行内全面替换。 
p 表示打印行。 
w 表示把行写入一个文件。 
x 表示互换模板块中的文本和缓冲区中的文本。 
y 表示把一个字符翻译为另外的字符(但是不用于正则表达式)
\\1 子串匹配标记
& 已匹配字符串标记

其它
! 表示后面的命令对所有没有被选定的行发生作用。 
= 打印当前行号码。 
# 把注释扩展到下一个换行符以前。

2 输出结果

以下是a.txt的文件内容

hello,world
world
Hello,hello,hello:11
HELLO
exe
eze
EXE
esssssssssss
esbc
esb
es
10.234.32.11
10A
abc
'abc
$123
123$
123sss
A123.
3214F.

1)用a参数在第二行的下面插入test11111

如果是要增加两行以上,在第二行后面加入两行字,例如『Drink tea or .....』与『drink beer?』,每一行之间都必须要以反斜杠『 \ 』来进行新行的添加
[root@www ~]# nl /etc/passwd | sed '2a Drink tea or ......\
> drink beer ?'
1 root:x:0:0:root:/root:/bin/bash
2 bin:x:1:1:bin:/bin:/sbin/nologin
Drink tea or ......
drink beer ?

3 daemon:x:2:2:daemon:/sbin:/sbin/nologin

2)用c参数替换第二行

如果是2-5行可以用  nl a.txt | sed '2,5c test1111'

3)用d参数查找并删除,比如删除2-5行  或者  删除带hello的行

要删除第 3 到最后一行

 nl /etc/passwd | sed '3,$d' 

4)用s参数进行替换

单独用s参数替换文件内容只会替换该行匹配到的第一个

#s和g搭配使用可达到替换全部匹配到的效果

还可以组合参数,先找出hello这行,然后将world替换成test111

另外也可以用s用作删除。比如删除【:】符号之前的内容,nl a.txt | sed -n '/hello:/{s/^.*://g;p}'

如果要删除之后的内容用sed 's/【匹配字符串】.*$//g'

5)用p参数进行搜索和打印

单独使用p参数可以看到不仅打印出匹配‘root’的行,还把原本内容打印出来

加上-n参数后,则只要经过sed特殊处理的那行才会被列出来。

6)使用y参数进行大小写转换

7)多点编辑

一条sed命令,删除/etc/passwd第三行到末尾的数据,并把bash替换为blueshell

nl /etc/passwd | sed -e '3,$d' -e 's/bash/blueshell/'
1  root:x:0:0:root:/root:/bin/blueshell
2  daemon:x:1:1:daemon:/usr/sbin:/bin/sh

-e表示多点编辑,第一个编辑命令删除/etc/passwd第三行到末尾的数据,第二条命令搜索bash替换为blueshell。

8)直接修改文件内容(危险动作)

利用 sed 将 regular_express.txt 内每一行结尾若为 . 则换成 !

 sed -i 's/\.$/\!/g' a.txt

  • 10
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值