sed的使用

sed使用场景

1.获取指定行数
sed -n '1,2p' test.txt(查看第1到2行的内容)
sed -n '1,$p' test.txt(查看第1行到文件末尾的内容)
sed -n '2,3!'p test.txt(查看不在第2到3行的内容)
sed -n '4q;2,3p' test.txt(读取第2到3行的内容,速度更快)

2.打印包含某字符的行
sed -n '/hello/p' test.txt(查看包含hello的行)

3.删除行
sed '/^#/d' test.txt(删除空行)
sed '/hello/d' test.txt(删除包含hello的行)
sed '5,10s/[a-z]//g' test.txt(删除第5行到第10行中的小写字母)
sed '5,$'d test.txt(删除第五行之后的内容)
sed 's/[^0-9a-zA-Z]//g' test.txt(删除除数字和字母以外的字符)
sed '/^#/d;G;G' test.txt(删除空行添加两个空行)
sed 'n;n;n;d;'  test.txt(删除第4行的倍数行)

4.选择特定的行,进行替换
sed '/demo/! s/hello/haha/g' test.txt > test1.txt(找到不包含demo的行中的hello替换成haha)
sed '/demo/! s#hello#haha#g' test.txt > test1.txt(避免替换/bin这种字符串的问题,把正则定界符换成#)
sed 'y/demo/Demo/' test.txt

5.把结果保存到文件
sed '1,2d;w demo.txt' test.txt(将第1,2行删除后保存到demo.txt文件)

6.添加字符
sed "1,3a hello\ndemo" test.txt(在第一行到第三行后添加字符串“hello\ndemo”)

7.替换
sed '1,3c hello' test.txt(把第一行到第三行替换成hello)

8.插入
sed -i '$a haha_i' test.txt(在文件的末尾插入字符串“haha_i”)

sed参数说明

用法: sed [选项]... {脚本(如果没有其他脚本)} [输入文件]...

  -n, --quiet, --silent
                 加上-n参数后,则只有经过sed特殊处理的那一行(或者动作)才会被列出来
  -e 脚本, --expression=脚本
                 添加“脚本”到程序的运行列表
  -f 脚本文件, --file=脚本文件
                 添加“脚本文件”到程序的运行列表
  --follow-symlinks
                 follow symlinks when processing in place; hard links
                 will still be broken.
  -i[SUFFIX], --in-place[=SUFFIX]
                 直接修改读取的文件内容,不是输出到屏幕
  -c, --copy
                 取代/替换字符串
  -l N, --line-length=N
                 指定“l”命令的换行期望长度
  --posix
                 关闭所有 GNU 扩展
  -r, --regexp-extended 在脚本中使用扩展正则表达式
  -s, --separate
                 将输入文件视为各个独立的文件而不是一个长的连续输入
  -u, --unbuffered
                 从输入文件读取最少的数据,更频繁的刷新输出
      --help     打印帮助并退出
      --version  输出版本信息并退出

如果没有 -e, --expression, -f 或 --file 选项,那么第一个非选项参数被视为
sed脚本。其他非选项参数被视为输入文件,如果没有输入文件,那么程序将从标准
输入读取数据。

应用

取出eth0对应的ip地址?
ifconfig eth0 | sed -n '2p' | awk -F "[: ]+" '{print $4}'
ifconfig eth0 | sed -n '/inet addr/p'| sed 's#.*addr:##g' | sed 's#  Bcast.*##g'
ifconfig eth0 | sed -n 's#^.*addr:\(.*\)  Bcast.*$#\1#gp'

取一个文件的权限?
Access: (0550/dr-xr-x---)  Uid: (    0/    root)   Gid: (    0/    root)
stat "/root" | sed -n '4p' | sed -n 's#^.*s: (\([0-9].*\)/dr.*$#\1#gp'
坚持原创技术分享,您的支持将鼓励我继续创作!