sed基本用法:
ed命令的常用选项如下:
-n(屏蔽默认输出,默认sed会输出读取文档的全部内容)
-r(让sed支持扩展正则)
-i(sed直接修改源文件,默认sed只是通过内存临时修改文件,源文件无影响)
行号可以是连续的行号,如打印passwd第3到第6行账户的信息 :
sed -n ‘3,6p’ /etc/passwd
sed ‘d’ /etc/passwd //删除所有行
sed -n ‘p’ /etc/passwd 匹配所有行
若希望直接修改文件内容,应添加选项 -i 。
比如,直接删除test.txt(自行创建一个任意内容的文件)的第1~4行: sed -i ‘1,4d’ test.txt //删除操作
打印第3和5行: sed -n ‘3p;5p’ /etc/passwd
打印第3以及后面的10行:sed -n ‘3,+10p’ /etc/passwd
打印奇数行: sed -n ‘1~2p’ /etc/passwd
打印偶数行: sed -n ‘2~2p’ /etc/passwd
(例子:sed n ‘3`5p’ /etc/passwd : 则输出第三行,第八行,第十三行…)
打印包含root的行:sed -n ‘/root/p’ /etc/passwd
打印bash结尾的行:sed -n ‘/bash
/
p
′
/
e
t
c
/
p
a
s
s
w
d
s
e
d
−
n
′
/p' /etc/passwd sed -n '
/p′/etc/passwdsed−n′=’ a.txt //输出文件的行数
sed ‘3,5d’ a.txt //删除第3~5行
sed ‘/xml/d’ a.txt //删除所有包含xml的行
sed ‘/xml/!d’ a.txt //删除不包含xml的行,!符号表示取反
sed ‘/^install/d’ a.txt //删除以install开头的行
sed ‘KaTeX parse error: Expected group after '^' at position 45: …件的最后一行 sed '/^̲/d’ a.txt //删除所有空行
ed命令的s替换基本功能(s/旧内容/新内容/选项)
替换操作的分隔“/”可改用其他字符,如#、&等,便于修改文件路径
sed ‘s/xml/XML/’ a.txt //将每行中第一个xml替换为XML
sed ‘s/xml/XML/3’ a.txt //将每行中的第3个xml替换为XML
sed ‘s/xml/XML/g’ a.txt //将所有的xml都替换为XML
sed ‘s/xml//g’ a.txt //将所有的xml都删除(替换为空串)
sed ‘s#/bin/bash#/sbin/sh#’ a.txt //将/bin/bash替换为/sbin/sh
sed ‘4,7s/^/#/’ a.txt //将第4~7行注释掉(行首加#号)
sed ‘s/^#an/an/’ a.txt //解除以#an开头的行的注释(去除行首的#号)
sed 's/.//2 ; s/.
/
/
′
n
s
s
w
.
t
x
t
删
除
文
件
中
每
行
的
第
二
个
、
最
后
一
个
字
符
s
e
d
−
r
′
s
/
(
.
)
(
.
)
(
.
∗
)
(
.
)
//' nssw.txt 删除文件中每行的第二个、最后一个字符 sed -r 's/^(.)(.)(.*)(.)
//′nssw.txt删除文件中每行的第二个、最后一个字符sed−r′s/(.)(.)(.∗)(.)/\1\3/ ’ 或 sed -r ‘s/^(.).(.).KaTeX parse error: Expected 'EOF', got '\1' at position 2: /\̲1̲\2/' 1.分两次替换操作,…//’ 替换掉最后一个字符
2.文件中每行的第一个、倒数第1个字符互换
每行文本拆分为“第1个字符”、“中间的所有字符”、“倒数第1个字符”三个部分,然后通过替换操作重排顺序为“3-2-1
sed -r 's/^(.)(.)(.)KaTeX parse error: Expected 'EOF', got '\3' at position 2: /\̲3̲\2\1/' nssw.txt…a 192.168.4.5 svr5.tarena.com svr5’ /etc/hostsed综合脚
注h----H(h,表示复制,空行覆盖。H,复制,空行追加保留。)
g----G(g,粘贴,覆盖原先内容,G粘贴,保留原先内容)
sed综合脚本应用
先用sed工具取出登录Shell为/bin/bash的用户记录,保存为临时文件/tmp/urec.tmp,并计算记录数量
再结合while循环遍历取得的账号记录,逐行进行处理
针对每一行用户记录,采用掐头去尾的方式获得用户名、密码字串
按照指定格式追加到/tmp/getuupwd.log文件
结束循环后删除临时文件,报告分析结果
编写getupwd.sh脚本
[root@svr5 ~]# vim ./getupwd.sh
#/bin/bash
A=
(
s
e
d
−
n
′
/
b
a
s
h
(sed -n '/bash
(sed−n′/bash/s/:.//p’ /etc/passwd) ## 提取符合条件的账号记录
for i in KaTeX parse error: Expected 'EOF', got '#' at position 43: … #̲#遍历账号记录 do …(grep
i
/
e
t
c
/
s
h
a
d
o
w
)
p
a
s
s
2
=
i /etc/shadow) pass2=
i/etc/shadow)pass2={pass1#:}
pass=KaTeX parse error: Expected '}', got 'EOF' at end of input: …:*} echo "i --> $pass"
done
[root@svr5 ~]# chmod +x ./getupwd.sh
测试、验证执行结果
./getupwd.sh
用户分析完毕,请查阅文件 /tmp/getupwd.log
[root@svr5 ~]# less /tmp/getupwd.log
root -->
6
6
6IWgMYmRACwdbfwBo$dr8Yn983nswiJVw0dTMjzbDvSLeCd1GMYjbvsDiFEkL8jnXOLcocBQypOCr4C6BRxNowIxjh6U2qeFU0u1LST/
zengye -->
6
6
6Qb37LOdzRl5995PI$L0zTOgnhGz8ihWkW81J.5XhPp/l7x2./Me2ag0S8tRndCBL9nIjHIKkUKulHxJ6TXyHYmffbVgUT6pbSwf8O71
clamav --> !!
mysql --> !!
abc --> !!
/总结知识点:
#sed [选项] ‘条件指令’ 文件
选项:
-n 屏蔽默认输出
-r 支持扩展正则
-i 修改源文件
条件:
行号 4 4,5 4~2 4,+10
/正则/
指令:
p 打印
d 删除
s 替换s旧/新/g
a 追加
i 插入
c 替换行