文本三剑客之sed
    Sed: 文本流编辑器; 非交互式,能同时处理多个文件多个行的内容,
    不对源文件改动,把整个文件输出到屏幕;还可以对源文件改动,但是不会在输出到屏幕上返回结果
    语法格式:
    [root@test tmp]# sed —help
    Usage: sed [OPTION]… {script-only-if-no-other-script} [input-file]…
    sed的命令格式: sed [options] ‘sed command’ filename
    sed的脚本格式: sed [options] -f ‘sed script’ filename
    常用选项:
    -n : 只打印模式匹配的行
    -e :直接在命令行模式上进行sed动作编辑(默认选项)
    -f : 将sed的动作写在一个文件中,用-f “sed script” 执行 script文件中的sed动作
    -r :支持扩展正则表达式
    -i :直接去修改文本内容

    查询文本的方式:
    使用行号和行号范围
    x: 行号
    x,y : 从x,y行
    x,y! : 从x,y行之外
    /pattern : 查询包含模式的行
    /pattern/,/pattern/ : 查询包含两个模式的行
    /pattern/,y : y行内查询包含匹配模式的行
    x,/pattern/: x行后查询包含匹配模式的行

    编辑命令:
    p : 打印匹配的行
    = : 显示文件行号
    a\: 指定行号后添加新文本
    i\: 指定行号前添加新文本
    d: 删除定位行
    c\: 用新文本内容替换定位到的行
    w filename: 写文本到另一个文件中
    r filename: 读另一文本到本文件中
    s /// : 替换
    替换标记:
    g: 行内全局替换
    p:显示替换成功的行
    w:将替换成功后的内容保存到指定文件中

    分隔符: /// —> @@@作为分隔符也是可以的


    q: 第一个模式匹配后立即退出
    {}: 在定位执行行的命令组,用;进行分隔
    g: 将模式2粘贴到/pattern n/ 位置

    实例:
    1. 只打印文本的第1到4行内容
    [root@test tmp]# sed -n ‘1,4p’ fstab
    2. 只打印文本中包含xfs的行
    [root@test tmp]# sed -n ‘/xfs/p’ fstab
    3. 只打印文本中以UUID开头的行
    [root@test tmp]# sed -n ‘/^UUID=./p’ fstab
    4. 显示文件中以UUID开头行的行号
    [root@test tmp]# sed -n ‘/^UUID=.
    /=’ fstab
    5. 在/etc/hosts文件中第3行位置添加主机名解析内容
    [root@test tmp]# sed -i ‘2a\192.168.10.10 node1’ /etc/hosts 指定行号后添加新文本
    6. 删除上述添加的解析内容
    [root@test tmp]# sed -i ‘3d’ /etc/hosts 删除定位行 上一次匹配的
    7. 替换以UUID开头行的内容
    [root@test tmp]# sed -i ‘/^UUID=./c\test……’ fstab
    8. 将fstab文件中以#开头的所有内容保存至fstab_part文件中
    [root@test tmp]# sed ‘/^#.
    /w fstab_part’ fstab
    9. 将fstab_part文件内容读写到1.txt文件中第2行以后位置
    [root@test tmp]# sed -i ‘2r fstab_part’ 1.txt
    10.将1.txt文本中hello替换成全局替换成大写
    [root@test tmp]# sed -i ‘s/hello/HELLO/g’ 1.txt
    将替换的内容保存至1_part.txt文本中
    [root@test tmp]# sed ‘s/HELLO/Hi/g w 1_part.txt’ 1.txt
    注意事项: 在进行编辑操作的时候,尽量先默认在命令行输出;保证正确的情况下,再使用-i参数对其
    文本进行修改
    111111 —> #111111
    reg:
    sed “1,3s/(.)/#\1/“ \1第一行:指定行号前添加新的文本 s替换
    1. 显示/etc/passwd文件中位于第偶数行的用户的用户名
    sed -n ‘n;p’ /etc/passwd | cut -d: -f1 #查看列数一的数据
    2. 为/tmp/1.txt 文件中前三行的行首加#号。
    sed -i ‘1,3s@(^.)@#\1@g’ /tmp/grub.conf ????、
    增加:
    [root@test tmp]# sed -i -r “1,3s/(.
    )/#\1/“ 1.txt
    [root@test tmp]# cat 1.txt
    #hello eagles
    #hello linux
    #/etc/fstab
    去掉#可以:
    [root@test tmp]# sed -i -r “1,3s/^#(.)/\1/“ 1.txt
    [root@test tmp]# cat 1.txt
    hello eagles
    hello linux
    /etc/fstab
    1,3s@(^.)@#\1@g
    取消注释行:
    sed ‘1,10s@^#(.
    )$@\1@g’ 1.txt
    ^#+(.)$ —-> 查询内容:所有#开头的行
    \1 替换的内容 (.
    )