Shell中正则表达式及sed和awk常见问题

 更新时间:2021年07月27日 09:56:38   作者:一个小运维  
本文主要介绍了Shell中正则表达式及sed和awk常见问题,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

1 正则表达式中的+、?、*分别表示什么含义?

这三个字符用来限制关键词的匹配次数,含义分别如下:

  • +:最少匹配一次,比如a+可匹配a、aa、aaa等
  • ?:最多匹配一次,比如a?可匹配零个或一个a
  • *:匹配任意多次,比如a*可匹配零个或任意多个连续的a

2 如何编写正则表达式匹配11位的手机号?

准备测试文件:
[root@svr5 ~]# cat tel.txt 
01012315
137012345678
13401234567
10086
18966677788
提取包含11位手机号的行:
[root@svr5 ~]# egrep '^1[0-9]{10}$' tel.txt 
13401234567
18966677788

3 简述sed定址符的作用及表示方式。

作用:地址符(执行指令的条件)控制sed需要处理文本的范围;不加定址符则逐行处理所有行
表示方式:地址符可以使用行号或正则表达式

4 如何使用sed提取文本中的偶数行?

查看测试文本:

[root@svr5 ~]# cat -n /etc/rc.local 
     1  #!/bin/sh
     2  #
     3  # This script will be executed *after* all the other init scripts.
     4  # You can put your own initialization stuff in here if you don't
     5  # want to do the full Sys V style init stuff.
     6
     7  touch /var/lock/subsys/local

提取偶数行的操作及效果:

[root@svr5 ~]# cat -n /etc/rc.local | sed -n '2~2p'
     2  #
     4  # You can put your own initialization stuff in here if you don't
     6

5 如何使用sed删除文本中每行的第4个字符?

查看测试文本:

[root@svr5 ~]# cat /etc/rc.local 
#!/bin/sh
#
# This script will be executed *after* all the other init scripts.
# You can put your own initialization stuff in here if you don't
# want to do the full Sys V style init stuff.
touch /var/lock/subsys/local

删除每行第4个字符的操作及效果:

[root@svr5 ~]# cat /etc/rc.local | sed 's/.//4'
#!/in/sh
#
# Tis script will be executed *after* all the other init scripts.
# Yu can put your own initialization stuff in here if you don't
# wnt to do the full Sys V style init stuff.
touh /var/lock/subsys/local

6 提取/etc/passwd文件的第6-10行,另存为pass5.txt文件。

提取或导出文本:

[root@svr5 ~]# sed -n '6,10p' /etc/passwd > pass5.txt

确认提取结果:

[root@svr5 ~]# cat pass5.txt 
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
uucp:x:10:14:uucp:/var/spool/uucp:/sbin/nologin

7 简述awk工具的基本语法格式。

格式1: awk [选项] ‘[条件]{处理动作}' 文件列表
格式2: 命令 | awk [选项] ‘[条件]{处理动作}'

8 简述awk工具常用的内置变量、各自的作用。

  • $n:即$1、$2、$3……,表示指定分隔的第几个字段
  • $0:保存当前读入的整行文本内容
  • NF:记录当前处理行的字段个数(列数)
  • NR:记录当前已读入行的数量(行数)

9 awk处理文本时,读文件前、读取文件内容中、读文件后后这三个环节是如何表示的?

  • BEGIN{ } 文件前处理:awk没有读入行之前 要执行的动作; 一般对数据作初始化操作,可以单独使用。
  • { } 行处理:对awk读入的每一行进行处理,可以单独使用。
  • END{ }文件后处理:awk 把所有的行都处理完后要执行的动作,一般输出数据处理的结果。可以单独使用。

10 提取当前eth0网卡的IPv4地址及掩码信息。

查看测试文本:

[root@svr5 ~]# ip add list eth0
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 00:0c:29:64:88:8e brd ff:ff:ff:ff:ff:ff
    inet 192.168.4.55/24 brd 192.168.4.255 scope global eth0
    inet 192.168.4.5/24 brd 192.168.4.255 scope global secondary eth0
    inet6 fe80::20c:29ff:fe64:888e/64 scope link 
       valid_lft forever preferred_lft forever

提取IPv4地址及掩码信息的操作及效果:

[root@svr5 ~]# ip add list eth0 | awk '/\<inet\>/{print $2}'
192.168.4.55/24
192.168.4.5/24

11 找出UID位于10~20之间的用户,输出用户名及对应的UID。

[root@svr5 ~]# awk -F: '$3>=10 && $3<=20{print $1":"$3}' /etc/passwd
uucp:10
operator:11
games:12
gopher:13
ftp:14

12 利用awk工具统计使用bash作为解释器的用户数量。

使用NF内置变量找最后一列的内容,匹配bash即可让x+1:

[root@svr5 ~]# awk -F/ '$NF=="bash"{x++}END{print x}' /etc/passwd

13 在awk中是否可以使用数组,分别以什么构成?

可以使用数组,分别以 数组名、下标、值 三个部分构成

14 在linux中对文本的排序如何实现?

使用sort命令,比如abc.txt文本
另外还可以使用选项-n按数字升序排列 -k:针对指定的列进行排序 -r:反向排序

[root@svr5 ~]# sort –n abc.txt

到此这篇关于Shell中正则表达式及sed和awk常见问题的文章就介绍到这了,更多相关Shell正则表达式及sed和awk内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 详解Shell编程之变量数值计算(一)

    详解Shell编程之变量数值计算(一)

    本篇文章主要介绍了详解Shell编程之变量数值计算,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-02-02
  • shell脚本将Oracle服务器中数据定时增量刷新到ftp服务器中

    shell脚本将Oracle服务器中数据定时增量刷新到ftp服务器中

    这篇文章主要介绍了shell脚本将Oracle服务器中数据定时增量刷新到ftp服务器中,非常不错,具有一定的参考借鉴价值 ,需要的朋友可以参考下
    2019-08-08
  • 详解Linux中的awk命令

    详解Linux中的awk命令

    awk是一个强大的文本分析工具,相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大。这篇文章主要介绍了Linux中的awk命令的相关知识,需要的朋友可以参考下
    2019-11-11
  • Shell脚本中的echo命令使用介绍

    Shell脚本中的echo命令使用介绍

    这篇文章主要为大家介绍了Shell脚本中的echo命令使用介绍,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-05-05
  • Shell脚本中awk指令的用法

    Shell脚本中awk指令的用法

    今天小编就为大家分享一篇关于Shell脚本中awk指令的用法,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2019-03-03
  • 提取oralce当天的alert log的shell脚本代码

    提取oralce当天的alert log的shell脚本代码

    提取oralce当天的alert log的shell脚本代码,需要的朋友可以参考下
    2013-02-02
  • Shell脚本中管道的几种使用实例讲解

    Shell脚本中管道的几种使用实例讲解

    今天小编就为大家分享一篇关于Shell脚本中管道的几种使用实例讲解,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2019-03-03
  • Shell 命令执行顺序分析[图]

    Shell 命令执行顺序分析[图]

    Shell 从标准输入或脚本中读取的每一行称为管道(pipeline);它包含了一个或多个命令(command),这些命令被一个或多个管道字符(|)隔开
    2013-01-01
  • 浅谈ubuntu 中sudo update与upgrade的作用及区别

    浅谈ubuntu 中sudo update与upgrade的作用及区别

    下面小编就为大家带来一篇浅谈ubuntu 中sudo update与upgrade的作用及区别。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-03-03
  • Shell调用curl实现IP归属地查询的脚本

    Shell调用curl实现IP归属地查询的脚本

    这篇文章主要介绍了Shell调用curl实现IP归属地查询,文中给大家提到了查询IP归属地的shell脚本,在批量查找数据的时候经常会遇到,今天给大家分享出来,需要的朋友可以参考下
    2021-07-07

最新评论