wdx1992828 发表于 2018-8-19 10:54:46

Linux shell基础(五)sed命令

一、sed命令
  sed是一种强大的流式编辑器 (stream editor for filtering and transforming text),它能够完美的使用正则表达式,逐行处理文本并把结果显示到屏幕上。sed的强项是替换文本中的特定字符,而写shell有个步骤就是从一段文本中截取一段字符进行处理,所以熟练掌握sed命令是写shell脚本的基本技能。
  用法:
  sed [选项]... {脚本(如果没有其他脚本)} [输入文件]
  sed 'command' file(s)
  sed -f scriptfile file(s)
  选项:
  -p 查找
  -d 删除
  -s 替换
二、sed 匹配搜索用法
  sed可以向grep一样查找文件文本中包含关键字的行并把改行显示在屏幕上。
  命令写法:sed-n '/(匹配的字符串)/'p 文件名(简记为-np)
  1、搜索passwd文件中包含root关键字的行。
  sed -n '/root/'p passwd

  2、搜索ssh文件中以#开头的行
  sed -n '/^#/'p ssh

  3、搜索正则'o+t'类型的行
  sed -nr ‘/o+t/’p passwd

  注意“+”号属于扩展正则,需要跟-r选项才能用
  4、搜索正则‘两次o’的行
  sed -nr '/o{2}/'p passwd

  5、搜索正则root或者bus的行‘root|bus’
  sed -nr '/root|bus/'p passwd

  6、不区分大小写搜索关键字所在的行
  sed -n '/nologin/'Ip passwd 注意是大写字母I,不是管道符号|

拓展用法:打印指定的行
  命令写法:sed -n ‘行号或行号描述’p 文件路径注意单引号''内不需要跟两个//
  1、显示文件第2行内容
  sed -n '2'p passwd

  2、显示文件第6行至10行内容
  sed -n '6,10'p passwd 注意中间是逗号,不是-

  3、全文显示
  sed -n '1,$'p passwd 注意不能写成“sed -n '^,$'p passwd”

拓展用法: 多条件过滤
  命令可以用-e参数匹配多个条件,注意多个条件是或者关系,只要符合其中的一条就会被找到,如果匹配两条规则,那么改行会显示两次
  显示第一行和含有root关键字的行
  sed-e '/root/'p -e '1'p -n passwd

三、sed删除特定行用法
  对特定大文件,使用sed命令删除部分内容,要比vim去打开相应的文件再删除要实用的多。没有加-i选项的删除只是显示上的删除,不会影响文件本身的内容,但加了-i选项后会作用于原始文件,所以删除前一定要做好备份。
  命令写法:sed '/(关键字)/'d 文件路径
  1、删除文件的第一行
  sed '1'd 1.txt

  注意第一行已经被删掉了
  2、删掉含关键字“bus”的行
  sed '/bus/'d 1.txt

  3、删掉特定时间段之前的文件的思路
  首先用grep -n >命令通过时间关键字过滤出行数。
  然后使用sed '1,找到的最后行行号‘d 方式删除数据
四、sed替换特定内容用法
  命令写法:
  sed '1,$s///g' 文件路径
  1、替换文件前10行中的ro+为R
  sed -r '1,10/ro+/R/g' 1.txt

  2、替换文件中的数字为空,其实就是删掉文件中所有的数字
  sed 's///g' 1.txt

  这个命令经常被用来判断输入的内容是否是数字
  3、替换文件中的字母为空,其实就是删掉文件中所有的英文字母
  sed 's///g' 文件名      (复习tr 命令 tr )

  4、在所有行前面加上字符串123
  小括号为扩展正则符号,使用时要加-r选项。
  sed -r 's/(.*)/123&/g' test.txt

五、sed调换字符串次序用法
  替换文字的顺序的关键是要用合适的正则
  小括号内容在下文中可以
  命令写法:
  sed -r 's/([^:]+):(.*):([^:]+)/\3:\2:\1:/' test.txt |head -n5

  该操作的难点在于分段的正则的写法。

页: [1]
查看完整版本: Linux shell基础(五)sed命令