1 sed命令
sed :stream editor 行编辑器
vim :交互式编辑器
sed是一种在线编辑器,它一次处理一行内容。处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”,接着用sed编辑命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末尾。
sed的优点:sed速度快,在启动vim的时间,sed已经完成了需要执行的操作
2 sed命令的功能
sed命令选项
选项 | 描述 |
---|---|
-e script | 在处理输入时,将script中指定的命令添加到运行的命令中 |
-f file | 在处理输入时,将file中指定的命令添加到运行的命令中 |
-n | 不要为每个命令生成输出,等待print命令来输出 |
(1)标记替换
sed命令可以对文本的内容进行替换,可以对文件中的单一行,也可以对整个文件的内容,并且可以对指定行的内容进行替换。
1)对文件中的内容进行替换
- 单句替换
sed 's/要替换的内容/替换后的内容'
- 对整个文件中的内容进行替换
sed 's/要替换的内容/替换后的内容' file
- 一次对整个文件中的多个对象进行替换
方法一:
sed -e 's/要替换的内容1/替换后的内容1;s/要替换的内容2/替换后的内容2/' file
方法二:
sed -e '
> s/要替换的内容1/替换后的内容1/
> s/要替换的内容2/替换后的内容2/
> s/要替换的内容3/替换后的内容3/' file
- 指定行替换
sed '2s/dog/tiger/' test #指定替换第二行
sed '4s/dog/tiger/' test #指定替换第四行
sed '2,4s/dog/tiger/' test #指定替换第2到4行
sed '2,$s/dog/tiger/' test #指定替换第二行到最后
sed '2{
> s/dog/tiger/
> s/brown/red/
> s/fox/ribbit/
> }' test #多个要求替换第二行
- 使用文件中指定命令替换另一文件
[root@desktop sed]# cat script
s/brown/red/
s/fox/tiger/
s/dog/cat/
[root@desktop sed]# sed -f script test
注意:进行替换后不会改变原文件的内容
(2) 参数g p和-n
1)参数g
- 当每一句中含有多个相同的内容时
sed 's/test/trial/' data #不加任何参数时默认替换每句中出现第一次的关键字
sed 's/test/trial/g' data #加上g参数时替换所有出现的关键字
sed 's/test/trial/2' data #加具体的数字n时,替换每句中出现第n次的关键字
2)参数p和-n
p显示指定句,通常和-n搭配使用; -n:默认不显示所有内容
sed -n 's/test/trial/p' test1 #只显示修改部分
sed -n 's/number/num/' test2 #使用-n而不使用p参数时,不会有显示
sed -n '/number3/p' test2 #显示匹配到的含有number3的行
sed -n '1,3p' test2 #显示1到3行
(3)参数w:写入文件
sed 's/test/trial/w test' test1 #将修改的句子写入test文件
sed '1,2w test' test2 #将1到2行写入test文件
(4)要替换部分中含有/符号时的解决
- 方法一:用\转义符号进行转义
- 方法二:修改格式中的/改为!或者#
sed 's/\/bin\/bash/\/bin\/csh/' test3
sed 's#/bin/bash#/bin/sssh#' test3
(5)参数d:删除
sed 'd' test2 #删除全部
sed '2d' test2 #删除第二行
sed '4d' test2 #删除第四行
sed '1,3d' test2 #删除第1到3行
sed '3,$d' test2 #删除第2行到结束的行
这里也可以使用正则表达式
(6)参数i和a:插入和追加
echo 'test 2' | sed 'i\test 1' #i表示插入到前面
echo 'test 2' | sed 'a\test 1' #a表示追加到末尾
sed '3i\test 1' test2 #插入到第三行前面
sed '3a\test 1' test2 #追加到第三行后面
[root@desktop sed]# sed '1i \
> new line1.\
> new line2.\
> new line3.' test2 #在test2文件的第一行前面插入多条
[root@desktop sed]# sed '$a/This is an inserted line.\nThis is another insertes line.' test2 #在test2文件的最后一行后追加多条
(7)参数c:修改
sed '3c\new line3.' test2 #修改指定的行,第三行
sed '/number1/c\new line.' test2 #修改包含指定信息的行
sed '2,4c\new line.' test2 #修改多行,注意:此处的修改多行为同时修改,而不是逐行修改
- 修改指定单个字符
sed 'y/123/789/' test2
当一行中包含多个要修改的单个字符时,默认全部修改:
echo "This 1 is a test of 1 try." | sed 'y/123/789/'
(8)显示行号:’=’
sed '=' test2
(9)参数r:组合两个文件
sed '3r test1' test2 #将test1文件内容添加到test2文件中第三行后面
sed '/number2/r test1' test2 #将test1文件内容添加到test2文件内容number之后