1、sed用法介绍
sed是一个非交互性文本流编辑器。它编辑文件或标准输入导出的文本拷贝。
使用sed需要记住的一个事实是,无论命令是什么,sed并不与初始化文件打交道,它操作的只是一个拷贝,然后所有的改动如果没有重定向到一个文件,将输出到屏幕。
因为sed是一个非交互性编辑器,必须通过行号或正则表达式指定要改变的文本行。
1)、sed怎样读取数据
从文件的一个文本行或从标准输入的几种格式中读取数据,将之复制到一个编辑缓冲区,然后读命令行或脚本的第一条命令,并使用这些命令查找模式多定位行号编辑它。重复此过程,直到命令结束。
2)、调用sed
三种方式:
在命令行中输入命令;
将sed命令插入脚本文件,然后调用sed;
将sed命令插入脚本文件,并使sed脚本可执行。
使用sed命令行的格式为:
sed[选项] sed命令输入文件
注意:在命令行使用sed命令时,实际命令要加单引号,sed也允许加双引号。
使用sed脚本文件的格式为:
sed[选项] -f sed 脚本文件输入文件
要使用第一行具有sed命令解释器的sed脚本文件,其格式为:
sed 脚本文件[选项] 输入文件
3)、sed命令的选项
n:不打印,sed不写编辑行到标准输出,默认为打印所有行。p命令可以用来打印编辑行。
c:下一命令是编辑命令
f:如果正在调用sed脚本文件,则使用此选项。此选项通知sed一个脚本文件支持所有的sed命令,
例如 sed -f myscirpt.sed input_file 。这里myscript.sed即为支持sed命令的文件。
2、保存sed输出
由于不接触初始化文件,如果想要保存改动内容,简单地将所有输出重定向到一个文件即可。
$sed 'some-sed-commands' input-file > myoutfile
3、使用sed在文件中查询文本的方式
sed浏览输入文件时,默认从第一行开始,有两种方式定位文本:
1)使用行号,可以是一个简单数字或一个行号范围
2)使用正则表达式
一些编辑命令
P:打印匹配行
=:显示文件行号
a/:在定位行号后附加新文本信息
i/:在定位行号后插入新文本信息
d:删除定位行
c/:用新文本替换定位文本
s:使用替换模式替换相应模式
r:从另一个文件中读文本
w:写文本到一个文件
q:第一个模式匹配完后退出或立即推出、
l:显示与八进制ASCII代码等价的控制字符
{}:在定位行执行的命令组
n:从另一个文件中读文本下一行,并附加在下一行
g:将模式2粘贴到/pattern n/
y:传送字符
n:延续到下一输入行;允许跨行的模式匹配语句sed和正则表达式
4. 测试
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
function removeLineForAssert(){
#$1 pattern to delete #$2 file name if [ -f ${CURL_LOG_DIRECTORY}/$2.resp ];then
sed /$1/d ${CURL_LOG_DIRECTORY}/$2.resp >${CURL_LOG_DIRECTORY}/new.txt
if [ -f ${CURL_LOG_DIRECTORY}/new.txt ];then
rm -r ${CURL_LOG_DIRECTORY}/$2.resp
mv ${CURL_LOG_DIRECTORY}/new.txt ${CURL_LOG_DIRECTORY}/$2.resp
else
echo "Failed to remove line from $2 to assert!"
fi
else
echo "Invalid input file!"
fi
}
|
删除某行,支持regex,语法如下
sed /duration/d test.txt>>new.txt
sed /pattern/d filename >>重定向
(责任编辑:IT)