本公众号发布的文章均转载自互联网或经作者投稿授权的原创,文末已注明出处,其内容和图片版权归原网站或作者本人所有,并不代表安世加的观点,若有无意侵权或转载不当之处请联系我们处理,谢谢合作!
欢迎各位添加微信号:asj-jacky
加入安世加 交流群 和大佬们一起交流安全技术
Linux中sed工具的使用
Sed
以行为单位的替换
定界符 /
删除操作:d
多点编辑:-e
从文件读入:r 命令
写入文件:w 命令
插入
Sed
sed 是一种流编辑器,它是文本处理中非常重要的工具,能够完美的配合正则表达式使用,功能不同凡响。处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末尾。文件内容并没有改变,除非你使用重定向存储输出。
注:sed命令不对原文件进行改变,除非使用 -i 参数;sed命令是一行一行处理的
sed命令的使用
sed 参数 命令 文件
参数
-
-f 脚本文件 以选项中指定的脚本文件来处理输入的文本文件
-
-e 脚本 以选项中指定的脚本来处理输入的文本文件
-
-n 仅显示处理了的行
命令
-
a 在当前行下面插入文本
-
i 在当前行上面插入文本
-
d 删除选择的行
-
s 替换指定字符
-
p 打印模板块的行
-
r file 从file中读行
-
w file 写入file文件中
-
i 修改原文件内容
行的打印显示
01
默认显示文件所有的内容
sed '/root/ROOT/p' /etc/passwd
只显示发生了改变的行
sed -n '/root/ROOT/p' /etc/passwd
查看指定行或指定几行
查看第10行的内容
sed -n '10p' /etc/passwd
查看5-10行的内容
sed -n '5,10p' /etc/passwd
以字符为单位的替换
02
将文件中的root替换为ROOT,只替换每行的第一个
sed 's/root/ROOT/' /etc/passwd
将文件中的所有root替换为ROOT
sed 's/root/ROOT/g' /etc/passwd
将文件中每行的第2个root开始替换为ROOT
sed 's/root/ROOT/2g' /etc/passwd
以行为单位的替换
03
将文件的1-5行替换为 i very happy
sed '1,5c i very happy' test
将以root开头的行替换为自己定义的行(在原位置进行行的替换)
sed '/^root/croot user login' /etc/passwd
数据的搜寻并执行命令
04
搜索/etc/passwd,找到含有 root 的行,执行后面花括号中的一组命令,这里把bash替换为nologin
这里会找到所有含有root的行,然后将第一个root换成ROOT
sed-n '/root/{s/bash/ROOT/p}' /etc/passwd
如果要将所有的root都换成ROOT
sed-n '/root/{s/bash/ROOT/pg}' /etc/passwd
找到root开头的行,将bash换成nologin
sed-n'/^root/{s/bash/ROOT/p}' /etc/passwd
如果要将所有的root都换成ROOT
sed-n'/^root/{s/bash/ROOT/pg}' /etc/passwd
定界符 /
05
在sed中使用 / 作为定界符,也可以使用任意的定界符,如:
-
sed 's:root:ROOT:g'
-
sed 's|root|ROOT|g'
当定界符出现在样式内部时,需要对其进行转义:
删除操作:d
06
-
删除空白行:sed '/^$/d' test
-
删除文件的第2行:sed '2d' test
-
删除文件的第2行到末尾所有的行:sed '2,$d' test
-
删除文件最后一行:sed '$d' test
-
删除文件中所有开头是root的行:sed '/^root/d' test
-
删除文件中含有root的行:sed '/root/d' test
-
删除奇数行显示偶数行:sed '1~2d' test
多点编辑:-e
07
-e 选项允许在同一行里执行多条命令
sed -e '1,5d' -e 's/root/ROOT/g' /etc/passwd 先删除文件中的1-5行,然后将剩余的行中所有的root替换为ROOT
从文件读入:r 命令
08
file里的内容被读进来,显示在与test匹配的行后面,如果匹配多行,则file的内容将显示在所有匹配行的下面:
sed '/test/r file' filename
写入文件:w 命令
09
在example中所有包含test的行都被写入file里:sed -n '/test/w file' example
插入
010
插入(行下) a 或 a
将 this is a test line 追加到 以test 开头的行后面:
sed '/^test/athis is a test line' test
sed '/^test/a this is a test line' test
在 test 文件第2行之后插入 this is a test line:
sed '2athis is a test line' test
sed '2a this is a test line' test
插入(行上) i 或 i
将 this is a test line 追加到以test开头的行前面:
sed '/^test/ithis is a test line' test
sed '/^test/i this is a test line' test
在文件第5行之前插入this is a test line:
sed '5ithis is a test line' test
sed '5i this is a test line' test
插入 (行首和行尾)
在所有行的行首和行尾添加
sed 's/^/HEAD/g' test #在test文件中所有行的行首加HEAD
sed 's/$/TAIL/g' test #在test文件中所有行的行尾加TAIL
在指定行的行首和行尾添加
sed '5s/^/HEAD/' test #在test文件中第5行的行首添加HEAD
sed '5s/$/TAIL/' test #在test文件中第5行的行尾添加TAIL
过滤指定行,然后在过滤行的行首和行尾添加
sed '/^ONBOOT/s/^/HEAD/' ifcfg #在以ONBOOT开头的行首加 HEAD
sed '/^ONBOOT/s/$/TAIL/' ifcfg #在以ONBOOT开头的行尾加 TAIL
相关链接:
Linux系统安全(六) | Linux中grep工具的使用
Linux系统安全(四) | Linux下逻辑卷LVM的管理和RAID磁盘阵列
Linux系统安全(三) | Linux下磁盘分区卸载和磁盘配额
本文始发于微信公众号(安世加):Linux系统安全(七) | Linux中sed工具的使用
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论