SHELL编程四剑客-sed

目录:

  1. sed简介
  2. 常用选项
  3. sed匹配模式和命令
  4. sed实例

sed简介

SED 是一个非交互式文本编辑器,它可对文本文件和标准输入进行编辑,标准输入可以来自键盘输入、文本重定向、字符串、变量,甚至来自于管道的文本,与 VIM 编辑器类似,它一次处理一行内容,Sed 可以编辑一个或多个文件,简化对文件的反复操作、编写转换程序等。

在处理文本时把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space),紧接着用 SED 命令处理缓冲区中的内容,处理完成后把缓冲区的内容输出至屏幕或者写入文件。

逐行处理直到文件末尾,然而如果打印在屏幕上,实质文件内容并没有改变,除非你使用重定向存储输出或者写入文件

命令格式

sed [-Options] [‘Commands’] filename;

常用选项

-n∶使用安静(silent)模式。在一般 sed 的用法中,所有来自 STDIN的资料一般都会被列出到萤幕上。但如果加上 -n 参数后,
则只有经过sed 特殊处理的那一行(或者动作)才会被列出来。

-e∶直接在指令列模式上进行 sed 的动作编辑;

-f∶直接将 sed 的动作写在一个档案内, -f filename 则可以执行 filename 内的sed 动作;

-r∶sed 的动作支援的是延伸型正规表示法的语法。(预设是基础正规表示法语法)

-i∶直接修改读取的档案内容,而不是由萤幕输出。  

回到目录

sed匹配模式和命令

x	#x 为指定行号;

x,y	#指定从x 到 y 的行号范围;

/pattern/	#查询包含模式的行;

/pattern/pattern/	#查询包含两个模式的行;

/pattern/,x	#从与 pattern 的匹配行到 x 号行之间的行;

x,/pattern/	#从 x 号行到与 pattern 的匹配行之间的行;

x,y!	#查询不包括 x 和 y 行号的行;

r	#从另一个文件中读文件;

w	#将文本写入到一个文件;

y	#变换字符;

q	#第一个模式匹配完成后退出;

l	#显示与八进制 ASCII 码等价的控制字符;

{}	#在定位行执行的命令组;

p	#打印匹配行;

=	#打印文件行号;

a 	#在定位行号之后追加文本信息;

i 	#在定位行号之前插入文本信息; 

d	#删除定位行;

c 	#用新文本替换定位文本;

s	#使用替换模式替换相应模式;

n	#读取下一个输入行,用下一个命令处理新的行;

N	#将当前读入行的下一行读取到当前的模式空间。

h	#将模式缓冲区的文本复制到保持缓冲区;

H	#将模式缓冲区的文本追加到保持缓冲区;

x	#互换模式缓冲区和保持缓冲区的内容;

g	#将保持缓冲区的内容复制到模式缓冲区;

G	#将保持缓冲区的内容追加到模式缓冲区。

回到目录

sed实例

# 替换 test.txt 文本中 old 为 new:
sed 's/old/new/g' test.txt

# 打印 test.txt 文本第一行至第三行:-n 静默输出
sed -n '1,3p' test.txt

# 打印 test.txt 文本中第一行与最后一行:
sed -n '1p;$p' test.txt

# 删除 test.txt 第一行至第三行、删除匹配行至最后一行:
sed '1,3d' test.txt
sed '/test/,$d' test.txt

# 删除 test.txt 最后 6 行及删除最后一行:
for i in `seq 1 6`;
do
	sed	-i '$d' test.txt ;
done

sed	'$d' test.txt

# 删除 test.txt 最后一行:
sed	'$d' test.txt

# 在 test.txt 查找 test.txt 所在行,并在其下一行添加 word 字符,a 表示在其下一行添加字符串:
sed	'/test/aword' test.txt

# 在 test.txt 查找 test 所在行,并在其上一行添加 word 字符,i 表示在其上一行添加字符串:
sed	'/test/iword' test.txt

# 在 test.txt 查找以 test 结尾的行尾添加字符串 word,$表示结尾标识,&在Sed 中表示添加:
sed 's/test$/&word/g' test.txt

# 在 test.txt 查找 www 的行,在其行首添加字符串 word,^表示起始标识,&在Sed 中表示添加:
sed	'/www/s/^/&word/' test.txt

# 多个 sed 命令组合,使用-e 参数:
sed	-e '/www.jd.com/s/^/&1./' -e 's/www.jd.com$/&./g' test.txt

# 多个 sed 命令组合,使用分号“;”分割:
sed	-e '/www.jd.com/s/^/&1./;s/www.jd.com$/&./g' test.txt

# Sed 读取系统变量,变量替换:
WEBSITE=WWW.TEST.NET
Sed	“s/www.jd.com/$WEBSITE/g” test.txt

# 修改 Selinux 策略 enforcing 为 disabled,查找/SELINUX/行,然后将其行enforcing 值改成 disabled、!s 表示不包括 SELINUX 行:
sed	-i '/SELINUX/s/enforcing/disabled/g' /etc/selinux/config
sed	-i '/SELINUX/!s/enforcing/disabled/g' /etc/selinux/config

多行模式

# 常用
# 合并上下两行,也即两行合并:

sed	'$!N;s/\n/ /' test.txt

sed	'N;s/\n/ /' test.txt

回到目录

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值