sed基础
什么是sed?
- Stream Editor:流式编辑器
- 非交互式
- 逐行处理
- 可以对文本进行增、删、改、查等操作
- 语法格式
- sed [选项] '[定位符]指令' 文件名
- 命令 | sed [选项] '[定位符]指令'
sed --help
用法: sed [选项]... {脚本(如果没有其他脚本)} [输入文件]...
-n, --quiet, --silent
取消自动打印模式空间
-e 脚本, --expression=脚本
添加“脚本”到程序的运行列表
-f 脚本文件, --file=脚本文件
添加“脚本文件”到程序的运行列表
--follow-symlinks
直接修改文件时跟随软链接
-i[SUFFIX], --in-place[=SUFFIX]
edit files in place (makes backup if SUFFIX supplied)
-c, --copy
use copy instead of rename when shuffling files in -i mode
-b, --binary
does nothing; for compatibility with WIN32/CYGWIN/MSDOS/EMX (
open files in binary mode (CR+LFs are not treated specially))
-l N, --line-length=N
指定“l”命令的换行期望长度
--posix
关闭所有 GNU 扩展
-r, --regexp-extended
在脚本中使用扩展正则表达式
-s, --separate
将输入文件视为各个独立的文件而不是一个长的连续输入
-u, --unbuffered
从输入文件读取最少的数据,更频繁的刷新输出
-z, --null-data
separate lines by NUL characters
--help
display this help and exit
--version
output version information and exit
如果没有 -e, --expression, -f 或 --file 选项,那么第一个非选项参数被视为
sed脚本。其他非选项参数被视为输入文件,如果没有输入文件,那么程序将从标准
输入读取数据。
GNU sed home page: <http://www.gnu.org/software/sed/>.
General help using GNU software: <http://www.gnu.org/gethelp/>.
E-mail bug reports to: <bug-sed@gnu.org>.
Be sure to include the word ``sed'' somewhere in the ``Subject:'' field.
sed -n '3p' /etc/passwd #指定打印第三行 -n 屏蔽默认输出
daemon:x:2:2:daemon:/sbin:/sbin/nologin
sed -n '1,3p' /etc/passwd #指定打印1到3行
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
sed '2p' /etc/hosts #sed默认会将全文输出,这里指定打印第二行,第二行重复
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
- 常用命令选项
- -n: 屏蔽默认输出
- -i: 直接修改源文件
- -r: 支持正则匹配
数据定位
- 行号定位
- sed可以使用行号来定位自己需要修改的数据内容
sed -n '3p' /etc/passwd #打印第三行
sed -n '1,3p' /etc/passwd #打印1到3行
sed -n '1~2p' /etc/passwd #第一行开始,步长为2
sed -n '2~2p' /etc/passwd #第2行开始,步长为2
sed -n '2,+3p' /etc/passwd #第2行以及后面的三行
- 正则定位
- sed可以使用正则匹配需要的数据,然后再编辑对应的内容
grep ^root /etc/passwd #过滤root开头的行
sed -n '/^root/p' /etc/passwd
egrep "[0-9]{3}" /etc/passwd #过滤包含三个数字的行
sed -rn '/[0-9]{3}/p' /etc/passwd
小结
- 本文带大家熟悉了sed基本语法格式
网友评论