linux命令:sed

简介:

   sed命令简介:

       文本编辑器,流编辑器,行编辑器.默认不编辑原文件, 仅对模式空间中的数据做处理;

      而后处理结束后,将模式空间打印至屏幕;

1.命令格式:

sed [option]'addresscommand' file ...对这个或这些文件的某一段进行编辑      

Address:(表示操作文本范围)

1、StartLine,EndLine

       比如1,100

       $:最后一行 

2、/RegExp/ 使用正则表达式来匹配模式 必须使用//

       /^root/

3、/pattern1/,/pattern2/

       第一次被pattern1匹配到的行开始,至第一次被pattern2匹配到的行结束,这中间的所有行

4、LineNumber

       指定某一行

5、StartLine, +N

       从startLine开始,向后的N行;

Command:(表示操作命令)

       d: 删除符合条件的行;

       p: 显示符合条件的行;

       a \string: 在指定的行后面追加新行,内容为string

              \n:可以用于换行

       i \string: 在指定的行前面添加新行,内容为string

       r FILE: 将指定的文件的内容添加至符合条件的行处

       w FILE: 将地址指定的范围内的行另存至指定的文件中;

       s/pattern/string/修饰符: 查找并替换,默认只替换每行中第一次被模式

        匹配到的字符串(pattern 被查找的字符串,string替换为的字符串)

           s/pattern/string/g 这样表示所有查到的字符串都被替换掉

              加修饰符

              g: 全局替换

              i: 忽略字符大小写

       s///: s###, s@@@   分割符也可以用###和@@@作为分隔符   

              \(\), \1, \2           

       l..e: like-->liker

                love-->lover   

                like-->Like

                love-->Love sed 's/l(..e)/L\1/g'   

       &: 引用模式匹配整个串

        sed 's/\(l..e\)/\1r/g' = sed 's/l..e/&r/g'

2.命令功能:

       文本编辑器,流编辑器,行编辑器.默认不编辑原文件, 仅对模式空间中的数据做处理;

      而后处理结束后,将模式空间打印至屏幕;

3.命令参数:

       -n: 静默模式,不再默认显示模式空间中的内容

       -i: 直接修改原文件

       -e SCRIPT -e SCRIPT:可以同时执行多个脚本

       -f /PATH/TO/SED_SCRIPT

              sed -f /path/to/scripts  file

              表示/path/to/scripts的脚本都对file文件执行

        -r: 表示使用扩展正则表达式

4.命令实例:

    1、删除/etc/grub.conf文件中行首的空白符;

   sed -r 's/^[[:space:]]+//g' /etc/grub.conf

[root@xuelinux ~]# sed -r 's/^[[:space:]]+//g' /etc/grub.conf

# Note that you do not have to rerun grub after making changes to this file

# NOTICE:  You have a /boot partition.  This means that

#          all kernel and initrd paths are relative to /boot/, eg.

#          root (hd0,0)

#          kernel /vmlinuz-version ro root=/dev/sda2

#          initrd /initrd-[generic-]version.img

#boot=/dev/sda

   2、替换/etc/inittab文件中“id:3:initdefault:”一行中的数字为5;

    sed 's/\(id:\)[[:digit:]]\(:initdefault:\)/\15\2/g' /etc/inittab

[root@xuelinux ~]# sed 's/\(id:\)[[:digit:]]\(:initdefault:\)/\15\2/g' /etc/inittab

#   0 - halt (Do NOT set initdefault to this)

#   1 - Single user mode

#   2 - Multiuser, without NFS (The same as 3, if you do not have networking)

#   3 - Full multiuser mode

#   4 - unused

#   5 - X11

#   6 - reboot (Do NOT set initdefault to this)

id:5:initdefault:

   3、删除/etc/inittab文件开头的#;

    sed 's/^#//g' /etc/inittab

[root@xuelinux ~]# sed 's/^#//g' /etc/inittab

   0 - halt (Do NOT set initdefault to this)

   1 - Single user mode

   2 - Multiuser, without NFS (The same as 3, if you do not have networking)

   3 - Full multiuser mode

   4 - unused

   5 - X11

   6 - reboot (Do NOT set initdefault to this)

id:3:initdefault:

   4、删除/etc/inittab文件中空白行;

    sed '/^$/d' /etc/inittab

   5、删除某文件中开头的#号及后面的空白字符,但要求#号后面必须有空白字符;

   sed 's/^#[[:space:]]\{1,\}//g' /etc/inittab 

   或者sed -r 's/^#[[:space:]]+//g' /etc/inittab

[root@xuelinux ~]# sed 's/^#[[:space:]]\{1,\}//g' /etc/inittab 

inittab is only used by upstart for the default runlevel.

#

ADDING OTHER CONFIGURATION HERE WILL HAVE NO EFFECT ON YOUR SYSTEM.

#

System initialization is started by /etc/init/rcS.conf

#

Individual runlevels are started by /etc/init/rc.conf

#

Ctrl-Alt-Delete is handled by /etc/init/control-alt-delete.conf

#

Terminal gettys are handled by /etc/init/tty.conf and /etc/init/serial.conf,

with configuration in /etc/sysconfig/init.

#

For information on how to write upstart event handlers, or how

upstart works, see init(5), init(8), and initctl(8).

#

Default runlevel. The runlevels used are:

0 - halt (Do NOT set initdefault to this)

1 - Single user mode

2 - Multiuser, without NFS (The same as 3, if you do not have networking)

3 - Full multiuser mode

4 - unused

5 - X11

6 - reboot (Do NOT set initdefault to this)


id:3:initdefault:

   6、删除某文件中以空白字符后面跟#类的行中的开头的空白字符及#

   sed 's/^[[:space:]]\{1,\}#//g'

   7、取出一个文件路径的目录名称;

   echo "/etc/inittab/" | sed -r 's#^(/.*/)[^/]+/?#\1#g'

[root@xuelinux test]# echo "/etc/inittab/" | sed -r 's#^(/.*/)[^/]+/?#\1#g'

/etc/

  取文件名(基名): 

    echo "/etc/inittab/" | sed -r 's#^/.*/([^/]+)/?#\1#g'

[root@xuelinux test]# echo "/etc/inittab/" | sed -r 's#^/.*/([^/]+)/?#\1#g'

inittab













本文转自wang650108151CTO博客,原文链接:http://blog.51cto.com/woyaoxuelinux/1864068 ,如需转载请自行联系原作者


相关文章
|
4天前
|
Linux
在 Linux 系统中,“cd”命令用于切换当前工作目录
在 Linux 系统中,“cd”命令用于切换当前工作目录。本文详细介绍了“cd”命令的基本用法和常见技巧,包括使用“.”、“..”、“~”、绝对路径和相对路径,以及快速切换到上一次工作目录等。此外,还探讨了高级技巧,如使用通配符、结合其他命令、在脚本中使用,以及实际应用案例,帮助读者提高工作效率。
22 3
|
4天前
|
监控 安全 Linux
在 Linux 系统中,网络管理是重要任务。本文介绍了常用的网络命令及其适用场景
在 Linux 系统中,网络管理是重要任务。本文介绍了常用的网络命令及其适用场景,包括 ping(测试连通性)、traceroute(跟踪路由路径)、netstat(显示网络连接信息)、nmap(网络扫描)、ifconfig 和 ip(网络接口配置)。掌握这些命令有助于高效诊断和解决网络问题,保障网络稳定运行。
17 2
|
25天前
|
运维 安全 Linux
Linux中传输文件文件夹的10个scp命令
【10月更文挑战第18天】本文详细介绍了10种利用scp命令在Linux系统中进行文件传输的方法,涵盖基础文件传输、使用密钥认证、复制整个目录、从远程主机复制文件、同时传输多个文件和目录、保持文件权限、跨多台远程主机传输、指定端口及显示传输进度等场景,旨在帮助用户在不同情况下高效安全地完成文件传输任务。
177 5
|
25天前
|
Linux
Linux系统之expr命令的基本使用
【10月更文挑战第18天】Linux系统之expr命令的基本使用
75 4
|
12天前
|
缓存 监控 Linux
|
15天前
|
Linux Shell 数据安全/隐私保护
|
16天前
|
域名解析 网络协议 安全
|
22天前
|
运维 监控 网络协议
|
23天前
|
监控 Linux Shell
|
4天前
|
安全 网络协议 Linux
本文详细介绍了 Linux 系统中 ping 命令的使用方法和技巧,涵盖基本用法、高级用法、实际应用案例及注意事项。
本文详细介绍了 Linux 系统中 ping 命令的使用方法和技巧,涵盖基本用法、高级用法、实际应用案例及注意事项。通过掌握 ping 命令,读者可以轻松测试网络连通性、诊断网络问题并提升网络管理能力。
22 3