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

目录
  • 1 正则表达式中的+、?、*分别表示什么含义?
  • 2 如何编写正则表达式匹配11位的手机号?
  • 3 简述sed定址符的作用及表示方式。
  • 4 如何使用sed提取文本中的偶数行?
  • 5 如何使用sed删除文本中每行的第4个字符?
  • 6 提取/etc/passwd文件的第6-10行,另存为pass5.txt文件。
  • 7 简述awk工具的基本语法格式。
  • 8 简述awk工具常用的内置变量、各自的作用。
  • 9 awk处理文本时,读文件前、读取文件内容中、读文件后后这三个环节是如何表示的?
  • 10 提取当前eth0网卡的IPv4地址及掩码信息。
  • 11 找出UID位于10~20之间的用户,输出用户名及对应的UID。
  • 12 利用awk工具统计使用bash作为解释器的用户数量。
  • 13 在awk中是否可以使用数组,分别以什么构成?
  • 14 在linux中对文本的排序如何实现?

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内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Shell正则表达式之grep、sed、awk实操笔记

    最近一直在研究shell脚本这块,刚好闲下来整了下自己手头上比较好的资料中的一些范例,以下是我整理的鸟哥私房菜里面正则表达式里面比较基础的一些语法详解,适合新手查阅. 首先先复制一段范例: 复制代码 代码如下: # vi regular_express.txt ------------------------------- "Open Source" is a good mechanism to develop programs. apple is my favorite food.

  • shell脚本之正则表达式、grep、sed、awk

    --正则-- 基础正则 ^word     ##搜索以word开头的 vi/vim中 ^ 一行的开头 word$     ##搜索以word结尾的 vi/vim中 $ 一行的结尾 ^$        ##表示空行 .         ##代表且只能代表任意一个字符 \         ##例:\. 只代表点本身,转义符号,让有特殊身份意义的字符,脱掉马甲,还原 \n        ##换行符 \r        ##匹配回车 \w         ##匹配任意一个字符和数字 *        

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

    目录 1 正则表达式中的+.?.*分别表示什么含义? 2 如何编写正则表达式匹配11位的手机号? 3 简述sed定址符的作用及表示方式. 4 如何使用sed提取文本中的偶数行? 5 如何使用sed删除文本中每行的第4个字符? 6 提取/etc/passwd文件的第6-10行,另存为pass5.txt文件. 7 简述awk工具的基本语法格式. 8 简述awk工具常用的内置变量.各自的作用. 9 awk处理文本时,读文件前.读取文件内容中.读文件后后这三个环节是如何表示的? 10 提取当前eth0网

  • 使用AWK在shell中生成日历小程序

    最近在学习sed和awk时,发现了一本入门级别的好书:<Software Design 中文版 03>. 我们这里的日历程序也是从那里得来,这里强烈推荐希望了解sed和awk的同志们入手本书. 代码段: # 在shell中生成日历 # 使用方式 # awk -f thisFile +2017 # awk -f thisFile +2017.10 # awk -f thisFile +2017.10.10 # function whichWeek(y, m, d, s) { s = 0 if (

  • Linux中 sed 和 awk的用法详解

    sed用法: sed是一个很好的文件处理工具,本身是一个管道命令,主要是以行为单位进行处理,可以将数据行进行替换.删除.新增.选取等特定工作,下面先了解一下sed的用法 sed命令行格式为: sed [-nefri] 'command' 输入文本 常用选项: -n∶使用安静(silent)模式.在一般 sed 的用法中,所有来自 STDIN的资料一般都会被列出到萤幕上.但如果加上 -n 参数后,则只有经过sed 特殊处理的那一行(或者动作)才会被列出来. -e∶直接在指令列模式上进行 sed 的

  • shell中的流编辑器awk工作原理

    awk命令 awk是一种处理文本文件的语言,是一个强大的文本分析工具, 用于在linux/unix下对文本和数据进行处理 . 而且它支持用户自定义函数和动态正则表达式等先进功能,是linux/unix下的一个强大编程工具 awk工作原理 逐行读取文本,默认以空格或tab键为分隔符进行分隔,将分隔所得的各个字段保存到内建变量中,并按模式或者条件执行编辑命令. sed命令常用于一整行的处理,而awk比较倾向于将一行分成多个"字段"然后再进行处理. awk信息的读入也是逐行读取的,执行结果可

  • Shell中使用grep、sed正则提取和替换字符串

    Linux中使用grep正则提取字符串 echo office365 | grep -P '\d+' -o find . -name "*.txt" | xargs grep -P 'regex' -o xargs会将find结果作为grep的输入,防止find结果过多无法处理 -P参数表明要应用正则表达式 -o表示只输出匹配的字符串,这样我们就可以把正则匹配到的结果拿到了. Linux.Mac OS中使用sed正则提取字符串 Mac OS上用正则的话要用e参数取代P参数,也可以用se

  • Linux Shell中的特殊符号和含义简明总结(包含了绝大部份)

    在Linux Shell中有很多的特殊符号,这对于我们写Shell脚本时要特别留意:一方面要知道这些特殊符号的用法,这些符号用好了可以达到事半功倍的效果:但另一方面要避免这些特殊符号的过度使用而导致脚本难以调试.难以阅读. 这些特殊符号罗列出来大致如下: 复制代码 代码如下: # ; ;; . , / / 'string'| ! $ ${} $? $$ $* "string"* ** ? : ^ $# $@ `command`{} [] [[]] () (()) || &~ ~

  • Linux 中常用的sed命令

    sed是一种流编辑器,它是文本处理中非常中的工具,能够完美的配合正则表达式使用,功能不同凡响.处理时,把当前处理的行存储在临时缓冲区中,称为"模式空间"(pattern space),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕.接着处理下一行,这样不断重复,直到文件末尾.文件内容并没有 改变,除非你使用重定向存储输出.Sed主要用来自动编辑一个或多个文件:简化对文件的反复操作:编写转换程序等. sed的选项.命令.替换标记 命令格式 sed [options

  • linux shell中的比较符号与特殊符号介绍

    shell字符串比较.判断是否为数字 二元比较操作符,比较变量或者比较数字.注意数字与字符串的区别. 整数比较 -eq 等于,如:if [ "$a" -eq "$b" ] -ne 不等于,如:if [ "$a" -ne "$b" ] -gt 大于,如:if [ "$a" -gt "$b" ] -ge 大于等于,如:if [ "$a" -ge "$b"

  • shell中删除文件中重复行的方法

    Linux下文本处理工具很丰富很强大,例如这样一个文件: 复制代码 代码如下: cat log www.jb51.net 192.168.1.1www.jb51.net 192.168.1.1www.jb51.net 192.168.1.2ffffffffffffffffffffffffffffffffffffeeeeeeeeeeeeeeeeeeeefffffffffffffffffffeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeggggggggggggggg

随机推荐