17 - shell之sed命令

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: .
General help using GNU software: .
E-mail bug reports to: .
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基本语法格式

你可能感兴趣的:(17 - shell之sed命令)