zoukankan      html  css  js  c++  java
  • Linux shell基础(五)sed命令

    一、sed命令

    sed是一种强大的流式编辑器 (stream editor for filtering and transforming text),它能够完美的使用正则表达式,逐行处理文本并把结果显示到屏幕上。sed的强项是替换文本中的特定字符,而写shell有个步骤就是从一段文本中截取一段字符进行处理,所以熟练掌握sed命令是写shell脚本的基本技能。

    用法:
    sed [选项]... {脚本(如果没有其他脚本)} [输入文件]
    sed [options] 'command' file(s)
    sed [options] -f scriptfile file(s)

    选项:
    -p 查找
    -d 删除
    -s 替换

    二、sed 匹配搜索用法

    sed可以向grep一样查找文件文本中包含关键字的行并把改行显示在屏幕上。
    命令写法:sed -n '/(匹配的字符串)/'p 文件名(简记为-np)

    1、搜索passwd文件中包含root关键字的行。

    sed -n '/root/'p passwd

    Linux  shell基础(五)sed命令

    2、搜索ssh文件中以#开头的行

    sed -n '/^#/'p ssh

    Linux  shell基础(五)sed命令

    3、搜索正则'o+t'类型的行

    sed -nr ‘/o+t/’p passwd

    Linux  shell基础(五)sed命令
    注意“+”号属于扩展正则,需要跟-r选项才能用

    4、搜索正则‘两次o’的行

    sed -nr '/o{2}/'p passwd

    Linux  shell基础(五)sed命令

    5、搜索正则root或者bus的行‘root|bus’

    sed -nr '/root|bus/'p passwd

    Linux  shell基础(五)sed命令

    6、不区分大小写搜索关键字所在的行

    sed -n '/nologin/'Ip passwd 注意是大写字母I,不是管道符号|

    Linux  shell基础(五)sed命令

    拓展用法:打印指定的行

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

    sed -n '2'p passwd

    Linux  shell基础(五)sed命令

    2、显示文件第6行至10行内容

    sed -n '6,10'p passwd 注意中间是逗号,不是-

    Linux  shell基础(五)sed命令

    3、全文显示

    sed -n '1,$'p passwd 注意不能写成“sed -n '^,$'p passwd”

    Linux  shell基础(五)sed命令

    拓展用法: 多条件过滤

    命令可以用-e参数匹配多个条件,注意多个条件是或者关系,只要符合其中的一条就会被找到,如果匹配两条规则,那么改行会显示两次

    显示第一行和含有root关键字的行

    sed -e '/root/'p -e '1'p -n passwd

    Linux  shell基础(五)sed命令

    三、sed删除特定行用法

    对特定大文件,使用sed命令删除部分内容,要比vim去打开相应的文件再删除要实用的多。没有加-i选项的删除只是显示上的删除,不会影响文件本身的内容,但加了-i选项后会作用于原始文件,所以删除前一定要做好备份。

    命令写法:sed '/(关键字)/'d 文件路径
    1、删除文件的第一行

    sed '1'd 1.txt
    Linux  shell基础(五)sed命令
    注意第一行已经被删掉了

    2、删掉含关键字“bus”的行

    sed '/bus/'d 1.txt

    Linux  shell基础(五)sed命令

    3、删掉特定时间段之前的文件的思路
    首先用grep -n >命令通过时间关键字过滤出行数。
    然后使用sed '1,找到的最后行行号‘d 方式删除数据

    四、sed替换特定内容用法

    命令写法:
    sed '1,$s///g' 文件路径

    1、替换文件前10行中的ro+为R

    sed -r '1,10/ro+/R/g' 1.txt

    Linux  shell基础(五)sed命令

    2、替换文件中的数字为空,其实就是删掉文件中所有的数字

    sed 's/[0-9]//g' 1.txt

    Linux  shell基础(五)sed命令
    这个命令经常被用来判断输入的内容是否是数字

    3、替换文件中的字母为空,其实就是删掉文件中所有的英文字母

    sed 's/[a-zA-Z]//g' 文件名 (复习tr 命令 tr [a-z] [A-Z])

    Linux  shell基础(五)sed命令

    4、在所有行前面加上字符串123
    小括号为扩展正则符号,使用时要加-r选项。

    sed -r 's/(.*)/123&/g' test.txt

    Linux  shell基础(五)sed命令

    五、sed调换字符串次序用法

    替换文字的顺序的关键是要用合适的正则
    小括号内容在下文中可以

    命令写法:

    sed -r 's/([^:]+):(.*):([^:]+)/3:2:1:/' test.txt |head -n5

    Linux  shell基础(五)sed命令

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

    转载于:https://blog.51cto.com/11934539/2061781

  • 相关阅读:
    【crontab】误删crontab及其恢复
    New Concept English there (7)
    New Concept English there (6)
    New Concept English there (5)
    New Concept English there (4)
    New Concept English there (3)
    New Concept English there (2)Typing speed exercise
    New Concept English there (1)Typing speed exercise
    New Concept English Two 34 game over
    New Concept English Two 33 94
  • 原文地址:https://www.cnblogs.com/twodog/p/12137682.html
Copyright © 2011-2022 走看看