正则表达式、文本操作

本文介绍了文本处理的三剑客——grep、sed和awk,详细讲解了正则表达式的字符匹配、匹配次数、位置锚定和分组应用。接着,深入探讨了sed的工作原理、常用命令以及模式空间与保持空间的概念。最后,提到了awk的使用,以及文本操作中的cut、sort、uniq、wc等命令的用法。
摘要由CSDN通过智能技术生成

文本处理三剑客:

grep:搜索工具

sed:文本编辑工具

awk

基本正则表达式:
字符匹配

.:匹配任意单个字符

+:匹配前面的字符一次或多次

[]:匹配指定范围的任意单个字符

[^]:匹配指定范围的任意单个字符

[:digit:]:数字

[[:disit:]]:匹配任意数字

[[​:alnum:​]]:匹配所有的字母和数字

[[:lower:]]:匹配任意小写字母

[[:upper:]]:匹配任意大写字母

[[:alpha:]]:匹配任意字母

<单词>:匹配完整单词

匹配次数

*:匹配前面字符任意次数

.*:匹配任意长度的任意字符

?:匹配前面的字符0次或1次

\ *:匹配前面的字符1次或多次

{m,n}:匹配前面的字符至少m次,至多n次({0,n}匹配至多n次;{1,}匹配至少1次)

位置锚定

^:行首锚定

$:行尾锚定

^$:空行

^ [[:space:]]$:空行或包含空白字符的行

< \b:词首锚定

练习:1、显示/etc/passwd中不以/bin/bash结尾的行

[root@node5 mnt]# grep -v /bin/bash$ /etc/passwd

-v为取反,$为行尾锚定

2、找出ifconfig命令中IP地址

[root@node5 ~]# ifconfig eth0 |grep inet |grep -v inet6 | cut -b 21-35

分组和应用:

\ (\ ):

​ \ (xy\ )\ (zd\ )ab1:在ab后匹配xy

​ \ (xy\ )\ (zd\ )ab2:在ab后匹配zd

[root@localhost ~]# grep l..e.*l..e file
he loves his lover
he likes his lover
she loves her lover
she likes her liker
[root@localhost ~]# grep "\(l..e\).*\1" file
he loves his lover
she loves her lover
she likes her liker

sed:

1、原理:非交互式编辑器,流式

脚本执行顺序:read(一行一行读取到模式空间)、execute、print、repeat

2、语法格式1:sed 选项 ‘[定址符]命令’ 文件

语法格式2:前指命令 | sed 选项 ‘[定址符]命令’

3、打印

常用选项:

{}:可组合多个命令,以分号分隔

-n:不输出模式空间中的内容至屏幕

[root@localhost ~]# sed -n 'p' /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
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
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
polkitd:x:999:998:User for polkitd:/:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
apache:x:48:48:Apache:/usr/share/httpd:/sbin/nologin
mysql:x:27:27:MariaDB Server:/var/lib/mysql:/sbin/nologin
test4:x:1001:1001::/home/test4:/bin/bash
test5:x:1002:1002::/home/test5:/bin/bash
test6:x:1003:1003::/home/test6:/bin/bash
[root@localhost ~]# sed -n '/^root/p' /etc/passwd(打印出/etc/passwd中以root开头的语句)
root:x:0:0:root:/root:/bin/bash
[root@localhost ~]# sed -n '2,3 p' /etc/passwd(打印出/etc/passwd/中的第2-3行)
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
[root@localhost ~]# sed -n '2,+3 p' /etc/passwd(打印出/etc/passwd中的第二行以及后面三行)
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
[root@localhost ~]# sed -n '3,/shutdown/ p' /etc/passwd(打印出/etc/passwd中第三行~以shutdown开头(包括)的内容)
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
[root@localhost ~]# sed -n '/^root/,/shutdown/ p' /etc/passwd(打印出/etc/passwd中以root开头的内容~以shutdown开头(包括)的内容)
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
[root@localhost ~]# sed -n '$ p' /etc/passwd
test6:x:1003:1003::/home/test6:/bin/bash

-e:多点编辑

[root@localhost ~]# sed -n -e '/^root/ p' -e '/^apache/p' /etc/passwd
root:x:0:0:root:/root:/bin/bash
apache:x:48:48:Apache:/usr/share/httpd:/sbin/nologin
[root@localhost ~]# sed -n \
> -e '/^root/p' \
> -e '/^apache/p' \
> /etc/passwd
root:x:0:0:root:/root:/bin/bash
apache:x:48:48:Apache:/usr/share/httpd:/sbin/nologin
[root@localhost ~]# sed -n -e '/^root/ p' -e '/^apache/ p' /etc/passwd(-e多点编辑,分别打印出/etc/passwd中以root开头和以apache开头的语句)
root:x:0:0:root:/root:/bin/bash
apache:x:48:48:Apache:/usr/share/httpd:/sbin/nologin

-f:将脚本文件的内容添加到要执行的命令中

[root@localhost ~]# cat test-script.sed
/^root/ p
[root@localhost ~]# sed -n -f test-script.sed /etc/passwd
root:x:0:0:root:/root:/bin/bash

-i:直接编辑原文件

[root@localhost ~]# sed -n '/^sync/,10 p' /etc/passwd(打印以sync开头到第十行(包括)的内容)
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
operator:x:11:0:operator:/root:/sbin/nologin
[root@localhost ~]# sed -n '1~2 p' /etc/passwd(从第1行开始,步长为2输出)
root:x:0:0:root:/root:/bin/bash
daemon:x:2:2:daemon:/sbin:/sbin/nolo
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值