sed: Stream Editor文本编辑器,面向字符流, 一次处理一行内容,处理时,将当前处理行存储再临时缓存区中,称为"模式空间"(pattern space), 接着用sed命令处理缓存区的内容,处理完成后,将缓存区的内容送到屏幕,接着处理下一行,不断重复直到结尾。
sed命令格式:
sed [option] 'sed command' filenamesed脚本格式:
sed [option] -f 'sed script' filenamesed命令选项
-n:只打印模式匹配的行(不然会全打出来)必须跟p
-e: 直接在命令行模式上进行sed动作编辑(默认)
-f: 执行script脚本
-r: 支持扩展表达式
-i: 直接修改原文件内容-
sed定址
- 行号:数字或者范围
model | summary |
---|---|
x | x为行号 |
x,y | 表示行号从x到y |
/pattern | 查询包含模式的行 |
/pattern /pattern | 查询包含两个模式的行 |
pattern/,x | 在给定行号上查询包含模式的行 |
x,/pattern/ | 通过行号和模式查询匹配的行 |
x,y! | 查询不包含指定行号x和y的行 ! 表示反选 |
- sed的编辑命令(sed command)
model | summary |
---|---|
p | 打印匹配行(和 -n 命令一个合用, 不然默认-e,缓存区的内容会重复输出) |
= | 显示文件行号 |
a\ | 在定位行号后附加新文本信息 |
i\ | 在定位行号后插入新文本信息 |
d | 删除定位行(只是打印输出删除了,原文件没变) |
c|用新文本替换定位文本 | |
w filename | 写文本到一个文件,类似输出重定向 > |
r filename | 从另一个文件中读文本,类似输入重定向 < |
s | 使用替换模式替换相应模式 |
q | 第一个模式匹配完成后退出或立即退出 |
l | 显示与八进制ACSII代码等价的控制符 |
n | 从另一个文件中读文本下一行,并从下一条命令而不是第一条命令开始对其的处理(啥意思??) |
N | 在数据流中添加下一行以创建用于处理的多行组 |
g | 将模式2粘贴到/pattern n/ |
y | 传送字符,替换单个字符 |
——————————————————————————
PS:
linux文件输入输出重定向
输出重定向:
echo line > file
echo line >> file # 追加不覆盖
重定向输入:
wc -l < file # 统计文件file的行数
—————————————————————————
栗子:
sed -n '/client_timeout/p' conf # 打印包含client_timeout的行
sed -n '/client_timeout/,/hahaha/p' conf # 两个pattern, 满足其一就打印
sed -n '2, /client_timeout/p' conf # 从第2行到出现client_timeout的那行打印
sed -n '-e /=/p' '-e =' test # 打印包含=的行, 且打印行号
修改配置文件conf的client_timeout值:
sed -i '-e s/\(client_timeout : \).*/\1100/' '-e s/\r//g' "/home/conf"