本文为了给小伙伴们熟悉linux的常用sed命令,特地出个专题篇按照从易到难的逐渐递增的顺序来举例使用命令
八大命令: p-打印命令、d-删除命令、s-替换命令、e-多重编辑命令、a-追加命令、i-插入命令、c-修改命令、y-转换命令
先创建一个例子,以供接下来测试使用 ceshi.txt #例子纯属作者太爱国,所以语文必须都是100分
name no. chinese english total
zhangsan 4 100 4 104
lisi 3 100 3 103
waner 5 100 5 105
mazi 2 100 2 102
author 1 100 60 160
注意:如果想直接复制命令调试看看运行可否,请不要复制ceshi.tex后面的空格号否则会报错没有文件
1)p-打印命令
sed '/zhangsan/p' ceshi.txt #'/string/'为匹配格式,string指要匹配的字符串,然后p-打印命令是在匹配到的字符串下面打印一次,所以结果显示为有zhangsan的这一行输出两次,结果为fig1。所以p-打印命令一般和n一起用以获得筛选出的行,( sed -n '/zhangsan/p' ceshi.txt )如fig2。 #记住此处的 -n 这是一个特殊含义符号,使用安静模式,在一般情况所有 的 STDIN 都会输出到屏幕上,加入-n 后只打印被 sed 特殊处理的行
把前缀涂掉是作者怕讲的不好你知道我是哪个学校的想找我麻烦
2)d-删除命令
sed '/zhangsan/d' ceshi.txt #将匹配到zhangsan的这行删除
其他用法
sed '1,4d' ceshi.txt #删除1-4行内容 #记住此处这个,表示范围的特殊符号
sed '3,$d' ceshi.txt #删除第三行到最后一行内容
3)s替换命令
sed -n 's/[0-9].0/99/p' ceshi.txt #s/string/replacestring/,第二个/为指示符,前面的内容为匹配内容,后面的为替换内容,将匹配内容替换成替换内容,不要搞错了 #记住这个[0-9] 还有 . 又是特殊符号 [0-9]表示匹配0-9内的一个字符,点表示除换行符外的任意一个字符,所以匹配内容为100,替换成99 友友们可以试试把[0-9].0后面那个0换成[0-9]就会发现后面的超过一百的数字也会变成99但是此时需要加上另一个特殊符号g,表示全局变量,否则只会匹配到处理行的首个匹配到的字符,即第一行[0-0].[0-9]匹配到的是99 ,这里有个空格的,加上g则第一行匹配到两个99 和104
sed -n 's/zhangsan/xiaoyl/p' ceshi.txt
结果(作者怕水印阻挡结果干脆手打): xiaoyl 4 99 4 104
4)e-多重编辑命令
sed -e '1,2d' -e 's/mazi/麻子/' ceshi.txt #先执行第一个-e后的命令即删除1-2行,然后执行第二个将mazi替换成麻子
友友们可以试一下 sed -n -e '1,2d' -e 's/^[a-m].../麻子/gp' ceshi.txt #把前面学的都用上,-n和p结合输出处理的行,处理的行=匹配到开头为[a-m]后跟三个任意字符的行然后替换成麻子 #记住这个^又是一个特殊字符,为行首定位符
5)a-追加命令
sed '/^author/a xiaoyl 1 100 60 160' ceshi.txt #在匹配到的行后加入了一行内容
sed '/author/a -----------------\
>hello,world' ceshi.txt #记住这个\又是一个特殊字符,为换行符
6)i-插入命令
sed '/author/i hello,world\
>------------------' ceshi.txt #在匹配到的行之前插入内容
7) c-修改命令
sed '/mazi/c 麻子' ceshi.txt #将匹配到的行内容修改,此修改和替换不一样,为全覆盖
8)-y 转换命令
sed '1,3y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/' ceshi.txt #将第一到三行匹配的字符一一对应替换a-A