首页 > linux > sed编辑器

sed编辑器

作者:bin
目录
[隐藏]

一、什么是sed

sed是一种流编辑器,vim是一种交互式编辑器。

二、使用方法

命令行:sed option script file

-e script 将script添加到已有命令中
-f file 将file文件中的命令添加到已有命令中
-n 不产生命令输出,使用print打印

简单的示例:

$echo "this is a test" | sed 's/test/mini test/'
$echo "this is a test "| sed -e 's/test/mini test/; s/is/are/'
$sed  's/test/mini test/'  file.txt
$sed -f script.sed  file.txt

三、深入学习sed

1.替换标记s

substitute:s/pattern/replacement/flags

flags有4种可用:

1:数字,表示替换多少次
2:g表示全文替换
3:p表示将原先的内容也打印出来
4:w file.txt 将替换内容写到文件中

vim编辑器%s替换相似,这里不再赘述,仅演示w

sed 's/test/trail/w test.txt'  file.txt

2.替换字符

sed运行使用自定义字符作为替换命令中的字符串分隔符
$echo "this is a test" | sed 's/test/mini test/'
等于
$echo "this is a test" | sed 's!test/mini test!'
这样可以免去对一些路径的斜杠进行转换的麻烦

3.寻址

3.1 数字方式寻址

sed '2s/dog/cat/' file.txt    改第2行
sed '2,3s/dog/cat/' file.txt  改第2-3行
sed '2,$s/dog/cat/' file.txt  改第2-最后一行

3.2 文本模式过滤寻址

/pattern/command
sed '/pattern/s/dog/cat/' file.txt  仅替换含有pattern行的dog为cat

4.命令组合

如果要在一行使用多条命令,可以使用花括号将命令组合在一起。

sed '2{s/dog/cat/;s/apple/orign/}' file.txt  替换第二行的dog和apple

5.删除行

sed '2d' file.txt     删除第二行

这里也可以类似的使用2,3d或者2,$d等,还可以使用匹配内容

sed '/pattern/d' 删除有pattern的行
sed '/patterna/,/patternb/d'  删除patterna到patternb之间的行,如果patternb不存在,就会一直删到文件结尾

6.头查入和尾附加行

i:Insert,在前一行插入

a: append 在后一行附加

echo "test  line 2"|sed 'i\test line 2'   插入 test line 2 至第一行前面

这里也可以类似的使用1i或者3a之类的进行指定行的插入,附加操作

7.修改行

修改(c:change)和插入(i)、附加(a)类似

echo "this is test " | sed 'c\test is end'   这里将第一行替换为test is end

这里也可以类似的使用1c或者3c之类的进行指定行替换

四、sed进阶

1.分支(b)

改变执行流程

sed -n '{:start; s/,//p; /,/b start}' $1

使用b命令添加一个分支,上面的命令使用b命令在匹配到逗号(,)时跳转到:start,如此就实现了一个循环,直到把文章的逗号都删除为止

sed -n '{2,3b; s/dog/cat/}' $1

如此在第2-3行跳过命令,因为2,3b后面没有跟东西

2.测试(t)

与分支(b)类似

sed -n '{:start; s/,//p; t start}' $1

t前面的命令执行成功,那么就会做一个跳转,如这里如果删掉了(,)号,那么就会跳转到start。如此又是一个循环;

3.&符号

使用&符号在替换匹配结果时使用

sed 's/.im/"&"/g' $1

这在替换时使用&表示刚才的匹配 .im 字符,. 代表任意一个字符
这里标识 将 匹配到的 .im  加上双引号 “.im”

这是提取整个字符串,如果想提取匹配的一个字符呢?

sed 's/\(t\)im/\1 ama/g' $1

先用()括起需要使用的子模式字符t,使用\1 的方式对子模式进行访问

您必须 [ 登录 ] 才能发表留言!