Linux 命令(7)—— sed



一、命令简介

  sed是一种流编辑器,它是文本处理中非常中的工具,能够完美的配合正则表达式使用,功能不同凡响。处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末尾。文件内容并没有 改变,除非你使用重定向存储输出。Sed主要用来自动编辑一个或多个文件;简化对文件的反复操作;编写转换程序等。

二、使用方法

sed [options] 'command' file(s)
sed [options] -f scriptfile file(s)

三、命令选项

# options
-n, --quiet, --silent:
	仅显示script处理后的结果;
	
-i[SUFFIX], --in-place[=SUFFIX]:
	默认情况下,sed 打印结果到标准输出。当你使用 sed 添加这个选项时,那么它会在适当的位置修改文件。当你添加一个后缀(比如,-i.bak)时,就会创建原始文件的备份(xxx.bak)。
	
-e script, --expression=script: 
	sed 命令可以包含不只一个 command。如果要包含多个 command,只需在每个 command 前面分别加上一个-e选项即可。
	
-f script-file, --file=script-file:  
	以选项中指定的script-file来处理输入的文本文件,script-file存放的是一条条commad记录。
...

# command
a :新增, a 的后面可以接字串,而这些字串会在新的一行出现(目前的下一行)~
c :取代, c 的后面可以接字串,这些字串可以取代 n1,n2 之间的行!
d :删除,因为是删除啊,所以 d 后面通常不接任何咚咚;
i :插入, i 的后面可以接字串,而这些字串会在新的一行出现(目前的上一行);
p :打印,亦即将某个选择的数据印出。通常 p 会与参数 sed -n 一起运行~
s :取代,可以直接进行取代的工作哩!通常这个 s 的动作可以搭配正规表示法!例如 1,20s/old/new/g 就是啦!
...

# sed替换标记
g 表示行内全面替换。  
p 表示打印行。  
w 表示把行写入一个文件。  
\1 子串匹配标记
& 已匹配字符串标记
...

四、常用示例

示例文件:a.txt

root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/bin/false
daemon:x:2:2:daemon:/sbin:/bin/false
mail:x:8:12:mail:/var/spool/mail:/bin/false
ftp:x:14:11:ftp:/home/ftp:/bin/false
&nobody:$:99:99:nobody:/:/bin/false
zhangy:x:1000:100:,,,:/home/zhangy:/bin/bash
http:x:33:33::/srv/http:/bin/false
dbus:x:81:81:System message bus:/:/bin/false
hal:x:82:82:HAL daemon:/:/bin/false
mysql:x:89:89::/var/lib/mysql:/bin/false
aaa:x:1001:1001::/home/aaa:/bin/bash
ba:x:1002:1002::/home/zhangy:/bin/bash
test:x:1003:1003::/home/test:/bin/bash
@zhangying:*:1004:1004::/home/test:/bin/bash
policykit:x:102:1005:Po

(1)截取a.txt的1-3行,写入新文件b.txt

# 方法一
sed -n '1,3p' a.txt > b.txt

# 方法二
sed -i.bak -n '1,3p' a.txt		## 此时会备份一个a.txt.bak文件,并对a.txt文件进行修改
mv a.txt b.txt

# 方法三
sed -n '1,3w b.txt' a.txt 


(2)删除文件中的数据

# 删除a.txt的第1行
sed -i '1d' a.txt

# 删除a.txt的第3行
sed -i '3d' a.txt

# 删除a.txt的最后一行
sed -i '$d' a.txt

# 删除a.txt的5-7行
sed -i '5,7d' a.txt

# 删除a.txt的5-7行之外所有的行(指定范围以外)
sed -i '5,7d!' a.txt

# 删除空行
sed -i '/^$/d' a.txt

# 删除包含test的行
sed -i '/test/d' a.txt



(3)插入数据

# 在a.txt的第1行的下面加入hello
sed -i '1 a hello' a.txt

# 在a.txt的第1行的上面加入hello
sed -i '1 i hello' a.txt			## 如果要插入空格,需要在空格前加'\'跳脱

# 在a.txt的包含test行的上面加入hello
sed -i '/test/ i hello' a.txt


(4)替换

# 将a.txt中出现test的行的第1个test替换成hello
sed -i 's/test/hello/' a.txt	#可以用 sed -n 's/test/hello/p' a.txt 先进行测试

# 将a.txt中出现test的行的第2个test替换成hello
sed -i 's/test/hello/2' a.txt	#在行中使用/1、/2……/n 等标志来代替相应的匹配

# 将a.txt中出现test的行的所有的test替换成hello
sed -i 's/test/hello/g' a.txt	

# 将a.txt 第14行的test替换成hello
sed -i '14,14 s/test/hello/g' a.txt

# 将a.txt的第14行替换成NewLine
sed -i '14,14 c NewLine' a.txt

# 在a.txt所有行首添加
sed -i 's/^/添加的头部&/g' a.txt

# 在a.txt所有行末添加
sed -i 's/$/&添加的尾部/g' a.txt      
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值