zoukankan      html  css  js  c++  java
  • Sed基本入门[4] Additional Sed Commands

    1、行后追加命令 a (Append Line After)


     可以在指定的行后追加一行或多行文本,其基本语法为:

    $ sed '[address] a the-line-to-append' input-file

    示例,在最后一行后添加一行文本:

    $ sed '$ a 106,Jack Johnson,Engineer' employee.txt 
    101,John Doe,CEO 
    102,Jason Smith,IT Manager 
    103,Raj Reddy,Sysadmin 
    104,Anand Ram,Developer 
    105,Jane Miller,Sales Manager 
    106,Jack Johnson,Engineer 

    在含有"Manager"的行后新添两行文本:

    $ sed '/Jason/a \
    I am Jason\
    My name is Jason' employee.txt

    显示结果为:

    101,John Doe,CEO 
    102,Jason Smith,IT Manager
    I am Jason
    My name is Jason
    103,Raj Reddy,Sysadmin
    104,Anand Ram,Developer
    105,Jane Miller,Sales Manager

    2、在行前插入一行 i (Insert Line Before)


     和命令 a 类似,区别只是在行前插入一行,基本语法为:

    $ sed '[address] i the-line-to-insert' input-file

    一个示例,在奇数行前插入一行文本:

    $ sed '1~2 i before odd ' employee.txt 
    before odd 
    101,John Doe,CEO 
    102,Jason Smith,IT Manager
    before odd 
    103,Raj Reddy,Sysadmin
    104,Anand Ram,Developer
    before odd 
    105,Jane Miller,Sales Manager

    3、更改某行 c (Change Line)


    把某行的内容用新文本行(可以一行或多行)替换,基本语法:

    $ sed '[address] c the-line-to-insert' input-file

    示例,把第二行文本替换为新文本行内容:

    $ sed '2 c 202,Jack Johnson,Engineer' employee.txt
    101,John Doe,CEO 
    202,Jack Johnson,Engineer 
    103,Raj Reddy,Sysadmin 
    104,Anand Ram,Developer 
    105,Jane Miller,Sales Manager

    4、结合使用 a,i,和 c 命令


     我们可以结合使用这3个命令,看一个示例,在包含文本“Jason”的行后插入一行文本,之前插入一行文本,并修改此行文本

    $ sed '/Jason/{
    > a\
    > 204,Jack Johnson,Engineer 
    > i\
    > 202,Mark Smith,Sales Engineer
    > c\
    > 203,Joe Mason,Sysadmin
    > }' employee.txt

    101,John Doe,CEO 202,Mark Smith,Sales Engineer 203,Joe Mason,Sysadmin 204,Jack Johnson,Engineer 103,Raj Reddy,Sysadmin 104,Anand Ram,Developer 105,Jane Miller,Sales Manager

     5、打印隐藏字符 l  (Print Hidden Characters)


     

    命令 l 可以打印文本中的隐藏字符,例如 \t(tab)、$(行尾)

    示例,

     $ sed -n l employee.txt 
    101,John Doe,CEO $
    102,Jason Smith,IT Manager$
    103,Raj Reddy,Sysadmin$
    104,Anand Ram,Developer$
    105,Jane\tMiller,Sales Manager$

    还可以在命令 l 后加上一个数字n,表示从第n个字符进行折行显示,例如:

    $ sed -n 'l 20' employee.txt 
    101,John Doe,CEO $
    102,Jason Smith,IT \
    Manager$
    103,Raj Reddy,Sysad\
    min$
    104,Anand Ram,Devel\
    oper$
    105,Jane\tMiller,Sa\
    les Manager$

    6、打印行号 = (Print Line Numbers)


     

    n可以在执行流中的默认打印前输出改行的行号,例如:

    $ sed = employee.txt 
    1
    101,John Doe,CEO 
    2
    102,Jason Smith,IT Manager
    3
    103,Raj Reddy,Sysadmin
    4
    104,Anand Ram,Developer
    5
    105,Jane    Miller,Sales Manager

    还可以指定哪些行打印行号:

    $ sed2,4=’ employee.txt 
    101,John Doe,CEO 
    2
    102,Jason Smith,IT Manager
    3
    103,Raj Reddy,Sysadmin
    4
    104,Anand Ram,Developer
    105,Jane    Miller,Sales Manager

    我们可以使用如下的方式来获得一个文件的行数(等同于 wc -l 的效果):

    $ sed -n '$ =' employee.txt 
    5

    7、字符集替换  y (transform)


     

    可以使用命令 y 进行字符集的替换,基本语法为:

    sed 'y/{set1}/{set2}/' employee.txt

    其中的set1和set2分表表示一个字符的集合,而且集合元素长度必须相等

    示例,将小写的字母a、b、c、d、e分别替换为对应的大写字母A、B、C、D、E

    $ sed 'y/abcde/ABCDE/' employee.txt 
    101,John DoE,CEO 
    102,JAson Smith,IT MAnAgEr 
    103,RAj REDDy,SysADmin 
    104,AnAnD RAm,DEvElopEr 
    105,JAnE MillEr,SAlEs MAnAgEr

    8、同时处理多个文件


     

    我们以上的处理中,都是一一个文件作为处理的文件,其实可以同时处理多个文件,只要在命令后的末位罗列文件名即可,例如以下示例,同时打印出两个文件中包含 "root" 的文本行:

    $ sed -n '/root/ p' /etc/passwd /etc/group 
    root:x:0:0:root:/root:/bin/bash 
    root:x:0:

    9、退出执行 q (Quit Sed)


    我们刚开始讲到过,sed的执行流程是:读取一行,执行命令,打印输出,重复以上步骤

    如果在“执行命令”中碰到了q命令,则会停止执行命令中接下来未执行的命令,转而打印输出,但是不再“重复以上步骤”,而是直接退出。

    示例,在打印第一行后退出:

    $ sed 'q' employee.txt 
    101,John Doe,CEO

    如果找到了含有"Manager"的行后,退出执行:

    $ sed '/Manager/q' employee.txt 
    101,John Doe,CEO 
    102,Jason Smith,IT Manager 

    10、从文件中读取 r (Read from File)


     

    命令r表示从一个文件中读取内容然后打印在某个位置之后

    $ sed -e '2 r path.txt' employee.txt 
    101,John Doe,CEO 
    102,Jason Smith,IT Manager
    reading /usr/local/bin directory 
    103,Raj Reddy,Sysadmin
    104,Anand Ram,Developer
    105,Jane    Miller,Sales Manager

    11、打印当前行并读取下一行 n (Print Pattern Space)


     

    命令 n 会将当前模式空间中的内容打印,然后从文件中读取下一行放到模式空间中以取代当前模式空间中的内容,这个过程发生在sed流程中的 “执行命令”阶段,因此会影响通常的执行流程。

    加上在命令 n 前后各有两个命令,例如:

    sed-command-1 
    sed-command-2 
    n 
    sed-command-3 
    sed-command-4 

    则命令 n 前两个命令在当前的模式空间中的文本行上执行,而命令 n 后的两条命令则在下一行的文本行上执行。

     

  • 相关阅读:
    Running ROS on Windows 10
    Roomblock: a Platform for Learning ROS Navigation With Roomba, Raspberry Pi and RPLIDAR(转)
    Understand:高效代码静态分析神器详解(转)
    VMware下ubuntu与Windows实现文件共享的方法
    Install rapyuta client on Ubuntu14.04
    Install rapyuta client on Raspberry Pi
    Installing ROS Indigo on the Raspberry Pi
    Shrinking images on Linux
    How to emulate a Raspberry Pi on your PC
    Remastersys打包你自己的ubuntu成iso文件
  • 原文地址:https://www.cnblogs.com/yangfengtao/p/2988634.html
Copyright © 2011-2022 走看看