Linux三剑客之sed和awk的基本应用

简介:

一、sed

1)sed简介

  sed的全称为stream editor,sed在处理时一次只读取文件的一行并对这一行进行处理,并且sed将处理后的数据只会显示在屏幕上,并不会对原文件进行修改,所以说sed是一个行编辑器

2)sed的使用格式

      sed [options] "script" FILE....

3)详解各选项与编辑命令的使用

    选项:

     -n:静默模式,不输出模式空间内的内容,默认打印空间模式内的内容

     -r:扩展的正则表达式

     -f 文件:指定sed脚本文件

     -i:直接编辑源文件

    编辑命令

      d:删除

      p:打印

      i \:在被指定到的行前面插入文本

      a \:在被指定到的行下面插入文本

      r 文件路径:在指定的位置插入另外一个文件的内容

      w 文件路径:将符合条件的所有行保存至指定的文件中

      = 显示符合条件的所在行的行号

      s@@@:查找条件也可以使用模式,但是被替换的内容不能使用模式  

          使用格式:

              sed '地址定界s@查找条件@替换后的文本@修饰符

              地址定界:自定义的起始行到结束行,默认为全文

                   有三种方式表示

                      startline,endline

                        /pat1/,/pat2/

                        /pattern/

              用法:sed [options] 'addr1[,addr2]编辑命令'FILE...

                   sed [options] "addr1[,addr2]编辑命令"FILE...

                  sed在做替换时还支持正则表达式,正则表达式的使用本处不做讲解。

              修饰符:

                   g:global,全局替换

                   i:ignore-case,不区分字符大小写

4)练习

1)替换/etc/inittab文件中”id:3:initdefault:"一行中的数字为5

    sed 's@\(id:\)[0-9]\(:initdefault\)@\15\2' /etc/inittab

2)删除/etc/init.d/funcions文件中的空白行

    sed "/^$/d" /etc/init.d/funcions

3)删除/etc/inittab文件中位于行首的#;

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

4)删除/etc/rc.d/rc.sysinit文件中以#后跟至少一个空白字符开头的行的行首的#和空白字符。

   sed "s@^#[[:space:]]\{1,\}\@@g" /etc/rc.d/rc.sysinit

5)删除/boot/grub/grub.conf文件中行首的空白字符。

   sed "s@^[[:space:]]\{1,\}@@g" /boot/grub/grub.conf

6)取出一个文件路径的目录名称,如/etc/sysconfig/network,其目录为/etc/sysconfig,功能类似dirname命令;

  echo /etc/sysconfig/network | sed "s@[^/]\{1,\}/\?$@@"

二、awk

1)简介

  awk是一个报告生成工具,旨在把文件中读取到的每一行的每个字段分别进行格式化,而后进行显示,awk支持使用变量、条件判断、循环、数组

  现在linux系统上用到的都是gawk

2)格式:

  awk [options] 'script'FILE....

  awk [options] '/pattern/{action}'FILE...

3)选项与模式的使用

   选项

    -F:指定切割符,默认为空白

    $0:整行显示

    $1,$2.......:位置参数

   模式

      地址定界:

       /pat1/,/pat2/,表示一个范围

       /pattern/,表示被匹配到的行

       表达式

       >,>=,<,<=,==,!=,~

      BEGIN:表示在执行动作前要做的操作

      END:表示在动作执行后的操作

  awk的常用四种分隔符:

      输入:

         行分隔符

         字段分隔符

      输出:

         行分隔符

         字段分隔符  

    awk的内置变量

     NF:最后一个字段

     FS:指定输入分隔符,在BEGIN中定义,相当于-F,默认为空白

     OFS:指定输出时的分隔符,在BEGIN中定义,默认为空白

4)练习

1.显示GID小于500的组

    awk -F : '$3<500{print $1}' /etc/group

2.显示默认的shell为nologin的用户

    awk -F : '$7~/nologin$/{print $1}' /etc/passwd

3,显示eth0网卡文件的配置信息,注意,只显示等号后面的值

    awk -F = '{print $2}' /etc/sysconfig/network-scripts/ifcfg-eth0

4.显示/etc/sysctl。conf文件中定义的内核参数:只显示名称,

    awk -F =' !/^#|^$/{print $1}'/etc/sysctl.conf

5.显示eth0网卡的ip地址,通过ifconfig命令结果进行过滤

   ifconfig eth0 |awk '/inet addr/{print $2}' |awk -F : '{print $2}'

建议:如果只是为了显示文本内容,建议优先考虑grep



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

相关文章
|
3天前
|
Linux 编译器 调度
xenomai内核解析--双核系统调用(二)--应用如何区分xenomai/linux系统调用或服务
本文介绍了如何将POSIX应用程序编译为在Xenomai实时内核上运行的程序。
19 1
xenomai内核解析--双核系统调用(二)--应用如何区分xenomai/linux系统调用或服务
|
3天前
|
消息中间件 存储 Linux
linux实时应用如何printf输出不影响实时性?
本文探讨了Linux实时任务中为何不能直接使用`printf(3)`,并介绍了实现不影响实时性的解决方案。实时任务的执行时间必须确定且短,但`printf(3)`的延迟取决于多个因素,包括用户态glibc缓冲、内核态TTY驱动和硬件。为确保实时性,通常将非实时IO操作交给低优先级任务处理,通过实时进程间通信传递信息。然而,即使这样,`printf(3)`在glibc中的实现仍可能导致高优先级任务阻塞。Xenomai 3提供了一个实时的`printf()`实现,通过libcobalt库在应用编译链接时自动处理,预分配内存,使用共享内存和线程特有数据来提高效率和实时性。
13 0
linux实时应用如何printf输出不影响实时性?
|
4天前
|
Linux Perl
Linux|了解如何使用 awk 内置变量
Linux|了解如何使用 awk 内置变量
11 1
|
6天前
|
安全 Linux Shell
Linux常用命令详解与实战应用
【5月更文挑战第7天】本文详述了Linux常用命令,包括文件与目录操作(ls, cd, pwd, cp, mv, rm)、文本处理(cat, grep, sed)及系统管理(top, df, du)命令。通过实例演示了如何使用这些命令,帮助读者理解和掌握Linux操作,提升系统管理效率。学习和熟练运用这些基础命令,是高效使用Linux的关键。
|
11天前
|
Linux Shell 调度
【Linux系列】fork( )函数原理与应用详解——了解【父子进程及其特性】(代码演示,画图帮助理解,思维导图,精简)(11)
【Linux系列】fork( )函数原理与应用详解——了解【父子进程及其特性】(代码演示,画图帮助理解,思维导图,精简)(11)
|
13天前
|
存储 缓存 Linux
linux几种典型应用对系统资源使用的特点
【4月更文挑战第22天】几种典型应用对系统资源使用的特点
25 1
|
2月前
|
搜索推荐 Linux 开发工具
【Linux】深入理解awk命令
【Linux】深入理解awk命令
50 0
|
6月前
|
存储 Linux Shell
Linux awk命令
除了使用 sed 命令,Linux 系统中还有一个功能更加强大的文本数据处理工具,就是 awk。 曾有人推测 awk 命令的名字来源于 awkward 这个单词。其实不然,此命令的设计者有 3 位,他们的姓分别是 Aho、Weingberger 和 Kernighan,awk 就取自这 3 为大师姓的首字母。 和 sed 命令类似,awk 命令也是逐行扫描文件(从第 1 行到最后一行),寻找含有目标文本的行,如果匹配成功,则会在该行上执行用户想要的操作;反之,则不对行做任何处理。awk 命令的基本格式为: [root@localhost ~]# awk [选项] '脚本命令' 文件名
76 1
|
7月前
|
Unix 测试技术 Linux
软件测试|Linux三剑客之awk命令详解
软件测试|Linux三剑客之awk命令详解
71 0