3、linux基础操作命令详解
sed --常用的流处理文本编辑器
常见参数 | 说明 |
---|---|
p | 打印输出 |
d | 删除 |
= | 打印匹配行的行号 |
-n | 取消默认的完整输出,只要需要的(行) |
-e | 允许多项编辑 |
-i | 修改文件内容 |
-r | 不需要转义 |
& | 上次匹配的结果 |
命令 | 功能 |
---|---|
a\ | 在当前行后添加一行或多行。多行时除最后一行外,每行末尾需用“\”续行 |
c\ | 用此符号后的新文本替换当前行中的文本。多行时除最后一行外,每行末尾需用""续行 |
i\ | 在当前行之前插入文本。多行时除最后一行外,每行末尾需用""续行 |
d | 删除行 |
h | 把模式空间里的内容复制到暂存缓冲区 |
H | 把模式空间里的内容追加到暂存缓冲区 |
g | 把暂存缓冲区里的内容复制到模式空间,覆盖原有的内容(全部替换) |
G | 把暂存缓冲区的内容追加到模式空间里,追加在原有内容的后面 |
l | 列出非打印字符 |
p | 打印行 |
n | 读入下一输入行,并从下一条命令而不是第一条命令开始对其的处理 |
q | 结束或退出sed |
r | 从文件中读取输入行 |
! | 对所选行以外的所有行应用命令 |
s | 用一个字符串替换另一个(替换) |
g | 在行内进行全局替换 |
w | 将所选的行写入文件 |
x | 交换暂存缓冲区与模式空间的内容 |
y | 将字符替换为另一字符(不能对正则表达式使用y命令) |
示例:
cat /etc/passwd > passwd
只打印第三行
sed -n '3p' passwd
# daemon:x:2:2:daemon:/sbin:/sbin/nologin
只查看文件的第3行到第9行
sed -n '3,9p' passwd
# daemon:x:2:2:daemon:/sbin:/sbin/nologin
# adm:x:3:4:adm:/var/adm:/sbin/nologin
# lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
# sync:x:5:0:sync:/sbin:/bin/sync
# shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
# halt:x:7:0:halt:/sbin:/sbin/halt
# mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
过滤特定字符串,显示正行内容
sed -n '/root/p' passwd
# root:x:0:0:root:/root:/bin/bash
# operator:x:11:0:operator:/root:/sbin/nologin
显示包含"adm"的行到包含"mail"的行之间的行
sed -n '/adm/,/mail/p' passwd
# adm:x:3:4:adm:/var/adm:/sbin/nologin
# lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
# sync:x:5:0:sync:/sbin:/bin/sync
# shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
# halt:x:7:0:halt:/sbin:/sbin/halt
# mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
打印1-5行,并显示行号
sed -n -e '1,5 p' -e '1,5 =' passwd
# root:x:0:0:root:/root:/bin/bash
# 1
# bin:x:1:1:bin:/bin:/sbin/nologin
# 2
# daemon:x:2:2:daemon:/sbin:/sbin/nologin
# 3
# adm:x:3:4:adm:/var/adm:/sbin/nologin
# 4
# lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
# 5
仅仅显示匹配字符串的行号
sed -n '/root/=' passwd
# 1
# 10
打印匹配行的内容和符号【相当于后面又根据关键词查询了一次】
sed -n -e '/root/p' -e '/root/=' passwd
# root:x:0:0:root:/root:/bin/bash
# 1
# operator:x:11:0:operator:/root:/sbin/nologin
# 10
用world 替换passwd文件中的root【真实写入】
sed -i 's/root/world/g' passwd
sed -i 's#root#world#g' passwd
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-SORMICcG-1599815790037)(./1566283526860.png)]
打印最后一行
sed -n '$p' passwd
# test:x:1003:1003::/home/test:/bin/bash
在文件第一行添加happy,文件结尾添加new year
sed -e '1i happy' -e '$a new year' passwd #【界面显示】
sed -i -e '1i happy' -e '$a new year' passwd #【真实写入文件】
在文件第一行到第四行的每行下面添加hahaha
sed '1,4i hahaha' passwd #输出 不改变源文件
& 符号在sed命令中代表上次匹配的结果
sed 's/world/hello_&/g' passwd
# 把world替换成hello_world
删除第3到第9行
sed '3,9d' passwd #输出不改变源文件
# cat passwd | wc -l
# 32
# sed '3,9d' passwd | wc -l
# 25
删除包含"root"的行到第十行的内容
sed '/root/,10d' passwd
# sed '/root/,10d' passwd | wc -l
# 22
备注:范围可以用数字、正则表达式、或二者的组合表示
显示中10到15行里匹配root,把行内所有的root替换为FTL,并打印到屏幕上
sed '10,15 s/root/FTL/g' passwd #【仅显示用】
sed -i sed '10,15 s/root/FTL/g' passwd #【-i 会真正替换信息】
-e是编辑命令,用于多个编辑任务
删除1到5行后,替换test为hello_world
sed -e '1,5d' -e '=' -e 's/bin/hello_world/g' passwd
打印3到6行的内容,并匹配reboot替换为shutdown
# 先匹配后替换
sed -n -e '3,6p' -e 's/bin/shutdown/g' passwd
# 先替换后匹配
sed -n -e 's/bin/shutdown/g' -e '3,6p' passwd
-r 命令是读命令。sed使用该命令将一个文本文件中的内容加到当前文件的特定位置上
sed '/root/ r test.txt' passwd
# 【passwd 匹配root后读入text.txt的内容在匹配内容之下,仅显示用】
-w是写入命令
sed -n '/root/ w root.txt' passwd #【passwd 匹配root后写入root.txt',真实写入】
# 添加-n参数后,不打印源文件,抑制输出
sed的正则匹配
正则匹配IP和子网掩码
ifconfig |sed -n '2p'
ifconfig |sed -n '2p' | sed -r 's#.*r:(.*) B.*k:(.*)#\1 \2#g'
(.*)表示匹配的项,之后可以用\1取出第一个括号内匹配的内容,\2取出第二个括号内匹配的内容
配合find命令的使用
find . -name "*.txt" |xargs sed -i 's/hhhh/\hHHh/g'
find . -name "*.txt" |xargs sed -i 's#hhhh#hHHh#g'
find . -name "*.txt" -exec sed -i 's/hhhh/\hHHh/g' {} \;
find . -name "*.txt" |xargs cat