标签:test ESS 多重 sed -e 多个 显示 开头 mon 读取
sed作用:主要用于替换指定的字符;查找或替换指定字符串时,必须把字符串用//来注释下,比如root 必须是/root/;
sed 只要不用-i参数,一般都是在输出终端上显示而已,无法更改源文件;
参数-e: --expression,多重编辑;
参数-n:不带-n则列出文件所有内容,加上-n只列出匹配的那一行;
参数-i:直接修改读取的内容文件,而不是输出到终端;
参数-r:可以让特殊字符不用加转义符脱义
功能I:忽略查询字符的大小写 ‘/ /’Ip
功能s:替换、取代;
功能g:本行全局替换;
功能d:删除;
功能a:新增;
打印指定某行
sed -n ‘n‘p filename
引号n代表数字,第几行,p为打印意思;
例如只打印第2行
[root@jinkai01 sed]# sed -n ‘2‘p passwd
bin:x:1:1:bin:/bin:/sbin/nologin
打印包含某个字符串的行
sed -n ‘\root\‘p filename
root 代表字符串,将包含root的行打印出来
[root@jinkai01 sed]# sed -n ‘/root/‘p passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
包含特殊字符用法
#打印以1 为开头的行****
sed -n ‘/^1/‘p passwd
#打印以 in 结尾的行
sed -n ‘/in$/‘p passwd
#打印包含r 和 o 之间有零个或一个的任意字符的行
sed -n ‘/r.o/‘p passwd
#打印包含oo后面有零个或多个o的行
sed -n ‘/ooo*/‘p passwd
#sed命令加上-e选项可以实现多个行为
sed -e ‘1‘p -e ‘/111/‘p -n passwd
打印出第一行和包含111字符的所有行
替换字符或者字符串
参数s就表示替换的动作;
参数g表示本行全局替换,如果不加g则只替换本行出现的第
一个;
指定替换一行或多行内的字符,不加数字就是替换文档全部,$表示结尾,^表示开头;
实验:把passwd文档的第1行和第2行的root换成aaa且打印出来
[root@jinkai01 sed]# sed ‘1,2s/root/aaa/g‘ passwd
aaa:x:0:0:aaa:/aaa:/bin/bash
替换文档内的全部数字或字母为空
实验:把passwd 文档内的所有字母替换为空
[root@jinkai01 sed]# sed ‘s/[a-zA-Z]//g‘ passwd
::0:0::/://
::1:1::/://
替换字母大小写
sed中,使用\u表示大写,\l表示小写
把文件中每个单词的第一个小写字母变大写:
sed ‘s/\b[a-z]/\u&/g‘ filename
把文件中所有字母小写变大写:
*sed ‘s/[a-z]/\u&/g‘ filename
sed ‘s/[A-Z]/\l&/g‘ filename
d:删除动作。
这里参数d表示删除的动作,它不仅可以删除指定的单行以及多行,而且可以删除匹配某个字符的行,还可以删除从某一行开始到文档最后一行的所有行。
这个删除操作仅仅是显示在屏幕上,原文档并没有影响。
实验:删除passwd内包含root的行
[root@jinkai01 sed]# sed ‘/root/‘d passwd
实验:删除passwd 文档的第1行
[root@jinkai01 sed]# sed ‘1‘d passwd
实验:删除passwd 文档的第1行到第3行
[root@jinkai01 sed]# sed ‘1,3‘d passwd
调换两个字符串的位置
-r 参数:可以不用加转义符\ 去脱义特殊字符
实验:把passwd文档内的root 和bin调换位置
[root@jinkai01 sed]# sed -r ‘s/(root)(.*)(bin)/\3\2\1/‘ passwd
实验:把passwd文档内的第一列和最后一列做调换
[root@jinkai01 sed]# sed -r ‘s/([^:]+):(.*):([^:]+)/\3:\2:\1/‘ passwd
/bin/bash:x:0:0:root:/root:root
/sbin/nologin:x:1:1:bin:/bin:bin
/sbin/nologin:x:2:2:daemon:/sbin:daemon
实验:在某一行前后增加指定内容
在每一行最后面加上:aaa
sed -r ‘s/([^:]+$)/\1:aaa/‘ passwd
在每一行最前面加上aaa:
sed -r ‘s/.*/aaa:&/‘ passwd
或sed -r ‘s/([^:]+)/aaa:\1/‘ passwd
将passwd 文档里面的ot 全部替换为 to,不打印到屏幕,真实改变文件本身
[root@jinkai01 sed]# sed -i ‘s/ot/to/g‘ passwd
[root@jinkai01 sed]# head -3 passwd
roto:x:0:0:roto:/roto:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
课后习题
(1) 把/etc/passwd复制到/root/test.txt,用sed打印所有行。
/bin/cp /etc/passwd /root/test.txt ; sed -n ‘1,$‘p test.txt
(2) 打印test.txt的第3行~第10行。
sed -n ‘3,10‘p test.txt
(3) 打印test.txt中包含root的行。
sed -n ‘/root/‘p test.txt
(4) 删除test.txt的第15行以及后面的所有行。
sed ‘15,$‘d test.txt
(5) 删除test.txt中包含bash的行。
sed ‘/bash/‘d test.txt
(6) 将test.txt中的root替换为toor。
sed ‘s/root/toor/g‘ test.txt
(7) 将test.txt中的/sbin/nologin替换为/bin/login。
sed ‘s#sbin/nologin#bin/login#g‘ test.txt
(8) 删除test.txt中第5行~第10行中所有的数字。
sed ‘5,10s/[0-9]//g‘ test.txt
(9) 删除test.txt中所有的特殊字符(除了数字以及大小写字母)。
sed ‘s/[^0-9a-zA-Z]//g‘ test.txt
(10) 把test.txt中第一个单词和最后一个单词调换位置。
sed -r ‘s/(^[a-zA-Z]+)([^a-zA-Z].*[^a-zA-Z])([a-zA-Z]+$)/\3\2\1/‘ test.txt
(11) 把test.txt中出现的第一组数字(1个或多个)和最后一个单词调换位置。
sed -r ‘s/(^[^0-9])([0-9]+)([^0-9].[^a-zA-Z])([a-zA-Z]+$)/\1\4\3\2/‘ test.txt
(12) 把test.txt中第一个数字移动到本行末尾。
sed -r ‘s/(^[^0-9])([0-9]+)([^0-9].$)/\1\3\2/‘ test.txt
(13) 在test.txt第20行到最后一行最前面加aaa:。
sed ‘20,$s/^.*$/aaa:&/‘ test.txt
标签:test ESS 多重 sed -e 多个 显示 开头 mon 读取
原文地址:https://blog.51cto.com/11451960/2521961