计算机基础9

 

正则表达式

^ 行首
$ 行尾
. 除了换行符以外的任意单个字符
* 前导字符的零个或多个
.* 所有字符

[] 字符组内的任一字符
[^] 对字符组内的每个字符取反(不匹配字符组内的每个字符)
^[^] 非字符组内的字符开头的行
[a-z] 小写字母
[A-Z] 大写字母
[a-Z] 小写和大写字母
[0-9] 数字

\< 单词头 单词一般以空格或特殊字符做分隔,连续的字符串被当做单词
\> 单词尾
扩展正则 加 -r 参数 或转义
sed -n '/roo\?/p' /etc/passwd
sed -rn '/roo?/p' /etc/passwd
? 前导字符零个或一个
+ 前导字符一个或多个
abc|def abc或def
a(bc|de)f abcf 或 adef
x\{m\} x出现m次
x\{m,\} x出现m次至多次(至少m次)
x\{m,n\} x出现m次至n次

grep命令

-n :显示行号
-o :只显示匹配的内容
-q :静默模式,没有任何输出,得用$?来判断执行成功没有,即有没有过滤到想要的内容
-l :如果匹配成功,则只将文件名打印出来,失败则不打印,通常-rl一起用,grep -rl 'root' /etc
-A :如果匹配成功,则将匹配行及其后n行一起打印出来
-B :如果匹配成功,则将匹配行及其前n行一起打印出来
-C :如果匹配成功,则将匹配行及其前后n行一起打印出来
--color
-c :如果匹配成功,则将匹配到的行数打印出来
-E :等于egrep,扩展
-i :忽略大小写
-v :取反,不匹配
-w:匹配单词

[root@scott dir]# grep -i 'hello' test.py
print('韦哥hello!')
[root@scott dir]# grep -i '正方形' test.py
print('韦哥正方形打野!')
[root@scott dir]# grep -iv '正方形' test.py
#coding:utf-8
print('韦哥蛇蛇蛇社会摇!')
print('韦哥hello!')
print('韦哥三角形中单!')
print('韦哥蛇皮走位!')
print('韦哥骚骚!')
print('韦哥蛇蛇蛇社会摇!')
[root@scott dir]# grep -c '正方形' test.py
1
[root@scott dir]# grep -c 'hello' test.py
1
[root@scott dir]# grep -c '韦哥' test.py
7
[root@scott dir]# grep -n '打野' test.py
4:print('韦哥正方形打野!')

[root@scott dir]# grep -C 2 '打野' test.py
print('韦哥蛇蛇蛇社会摇!')
print('韦哥hello!')
print('韦哥正方形打野!')
print('韦哥三角形中单!')
print('韦哥蛇皮走位!')
[root@scott dir]# grep -A 2 '打野' test.py
print('韦哥正方形打野!')
print('韦哥三角形中单!')
print('韦哥蛇皮走位!')
[root@scott dir]# grep -B 2 '打野' test.py
print('韦哥蛇蛇蛇社会摇!')
print('韦哥hello!')
print('韦哥正方形打野!')

sed命令

  • sed

流编辑器 stream editer,是以行为单位的处理程序

sed 流编辑器 stream editer

语法

sed [options] 'command' in_file[s]

options 部分

-n #部位每个命令生成输出,等待print命令输出
-e script #将script中的命令添加到运行的命令中
-i #确认修改sed操作并且保存
-f file #将file中的命令添加到运行的命令中

command 部分

'[地址1,地址2] [函数] [参数(标记)]'

定址的方法 1.数字 2.正则

  • 数字
    十进制数
    1 单行
    1,3 范围 从第一行到第三行
    2,+4 匹配行后若干行
    4,~3 从第四行到下一个3的倍数行
    2~3 第二行起每间隔三行的行
    $ 尾行
    1! 除了第一行以外的行

  • 正则
    正则必须用//包裹起来
    扩展正则需要用 -r 参数或转义
    数字定址:sed -n '1p' /etc/passwd
    正则定址:sed -n '/^root/p' /etc/passwd

作业

正则表达式及字符处理

目标文件/etc/passwd,使用grep命令或egrep

  1. 显示出所有含有root的行:
[root@scott etc]# egrep 'root' /etc/passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
  1. 输出任何包含bash的所有行,还要输出紧接着这行的上下各两行的内容:
[root@scott etc]# egrep -C2  'root' /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
--
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
  1. 显示出有多少行含有nologin。
[root@scott etc]# egrep -c  'nologin' /etc/passwd
40
  1. 显示出那些行含有root,并将行号一块输出。
[root@scott etc]# egrep -nw  'root' /etc/passwd
1:root:x:0:0:root:/root:/bin/bash
10:operator:x:11:0:operator:/root:/sbin/nologin
  1. 显示出文件中
  2. 新建用户
    abominable
    abominate
    anomie
    atomize
    编写正则表达式,将他们匹配出来
[root@scott etc]# egrep 'a[b|n|t]omi*' /etc/passwd
abominable:x:1207:1208::/home/abominable:/bin/bash
abominate:x:1208:1209::/home/abominate:/bin/bash
anomie:x:1209:1210::/home/anomie:/bin/bash
atomize:x:1210:1211::/home/atomize:/bin/bash
egrep 'a.omi(nabl|nat|z|)e' /etc/passwd
  1. 建四个用户
    Alex213sb
    Wpq2222b
    yH438PIG
    egon666
    egon

    过滤出用户名组成是字母+数字+字母的行

[root@scott etc]# egrep '[^a-Z][0-9][a-Z$]' /etc/passwd
Alex213sb:x:1207:1208::/home/Alex213sb:/bin/bash
Wpq222b:x:1208:1209::/home/Wpq222b:/bin/bash
yH438PIG:x:1209:1210::/home/yH438PIG:/bin/bash

[root@MiWiFi-R3-srv ~]# egrep '^[a-Z]+[0-9]+[a-Z]+' /etc/passwd

  1. 显示出/etc目录下所有包含root的文件名
[root@scott etc]# find -type f -print|grep 'root'
./selinux/targeted/contexts/users/root
./sysconfig/readonly-root
./security/chroot.conf
./unbound/root.key
  1. 过滤掉/etc/ssh/sshd_config内所有注释和所有空行
[root@scott etc]# grep -v '#' /etc/ssh/sshd_config|grep -v '^ *$'
HostKey /etc/ssh/ssh_host_rsa_key
HostKey /etc/ssh/ssh_host_ecdsa_key
HostKey /etc/ssh/ssh_host_ed25519_key
SyslogFacility AUTHPRIV
AuthorizedKeysFile  .ssh/authorized_keys
PasswordAuthentication yes
ChallengeResponseAuthentication no
GSSAPIAuthentication yes
GSSAPICleanupCredentials no
UsePAM yes
X11Forwarding yes
UsePrivilegeSeparation sandbox     
AcceptEnv LANG LC_CTYPE LC_NUMERIC LC_TIME LC_COLLATE LC_MONETARY LC_MESSAGES
AcceptEnv LC_PAPER LC_NAME LC_ADDRESS LC_TELEPHONE LC_MEASUREMENT
AcceptEnv LC_IDENTIFICATION LC_ALL LANGUAGE
AcceptEnv XMODIFIERS
Subsystem   sftp    /usr/libexec/openssh/sftp-server

标准答案以及结果

[root@scott etc]# grep -v '^#' /etc/ssh/sshd_config |grep -v '^ *$'
HostKey /etc/ssh/ssh_host_rsa_key
HostKey /etc/ssh/ssh_host_ecdsa_key
HostKey /etc/ssh/ssh_host_ed25519_key
SyslogFacility AUTHPRIV
AuthorizedKeysFile  .ssh/authorized_keys
PasswordAuthentication yes
ChallengeResponseAuthentication no
GSSAPIAuthentication yes
GSSAPICleanupCredentials no
UsePAM yes
X11Forwarding yes
UsePrivilegeSeparation sandbox      # Default for new installations.
AcceptEnv LANG LC_CTYPE LC_NUMERIC LC_TIME LC_COLLATE LC_MONETARY LC_MESSAGES
AcceptEnv LC_PAPER LC_NAME LC_ADDRESS LC_TELEPHONE LC_MEASUREMENT
AcceptEnv LC_IDENTIFICATION LC_ALL LANGUAGE
AcceptEnv XMODIFIERS
Subsystem   sftp    /usr/libexec/openssh/sftp-server

grep -v '^#' /etc/ssh/sshd_config |grep -v '^ *$'

作业三:Sed作业:以/etc/passwd文件为模板

  1. 删除文件每行的第一个字符。
[root@scott ~]# sed 's/^[a-Z]//g' /test/dir/multicom.txt
oot:x:0:0:root:/root:/bin/bash
in:x:1:1:bin:/bin:/sbin/nologin
aemon:x:2:2:daemon:/sbin:/sbin/nologin
dm:x:3:4:adm:/var/adm:/sbin/nologin
p:x:4:7:lp:/var/spool/lpd:/sbin/nologin
ync:x:5:0:sync:/sbin:/bin/sync
hutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
alt:x:7:0:halt:/sbin:/sbin/halt
ail:x:8:12:mail:/var/spool/mail:/sbin/nologin
perator:x:11:0:operator:/root:/sbin/nologin
  1. 删除文件每行的第二个字符。
[root@scott ~]# sed -r 's/(^.)(.)/\1/g' /test/dir/multicom.txt
rot:x:0:0:root:/root:/bin/bash
bn:x:1:1:bin:/bin:/sbin/nologin
demon:x:2:2:daemon:/sbin:/sbin/nologin
am:x:3:4:adm:/var/adm:/sbin/nologin
l:x:4:7:lp:/var/spool/lpd:/sbin/nologin
snc:x:5:0:sync:/sbin:/bin/sync
sutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
hlt:x:7:0:halt:/sbin:/sbin/halt
mil:x:8:12:mail:/var/spool/mail:/sbin/nologin
oerator:x:11:0:operator:/root:/sbin/nologin
  1. 删除文件每行的最后一个字符。
[root@scott ~]# sed -r 's/.$//g' /test/dir/multicom.txt
root:x:0:0:root:/root:/bin/bas
bin:x:1:1:bin:/bin:/sbin/nologi
daemon:x:2:2:daemon:/sbin:/sbin/nologi
adm:x:3:4:adm:/var/adm:/sbin/nologi
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologi
sync:x:5:0:sync:/sbin:/bin/syn
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdow
halt:x:7:0:halt:/sbin:/sbin/hal
mail:x:8:12:mail:/var/spool/mail:/sbin/nologi
operator:x:11:0:operator:/root:/sbin/nologi
  1. 删除文件每行的倒数第二个字符。
[root@scott ~]# sed -r 's/(.)(.$)/\2/g' /test/dir/multicom.txt
root:x:0:0:root:/root:/bin/bah
bin:x:1:1:bin:/bin:/sbin/nologn
daemon:x:2:2:daemon:/sbin:/sbin/nologn
adm:x:3:4:adm:/var/adm:/sbin/nologn
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologn
sync:x:5:0:sync:/sbin:/bin/syc
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdon
halt:x:7:0:halt:/sbin:/sbin/hat
mail:x:8:12:mail:/var/spool/mail:/sbin/nologn
operator:x:11:0:operator:/root:/sbin/nologn
  1. 删除文件每行的第二个单词。
[root@scott ~]# sed -r 's/^([a-Z]+)([^a-Z])([a-Z])/\1\2/g' /test/dir/multicom.txt
root::0:0:root:/root:/bin/bash
bin::1:1:bin:/bin:/sbin/nologin
daemon::2:2:daemon:/sbin:/sbin/nologin
adm::3:4:adm:/var/adm:/sbin/nologin
lp::4:7:lp:/var/spool/lpd:/sbin/nologin
sync::5:0:sync:/sbin:/bin/sync
shutdown::6:0:shutdown:/sbin:/sbin/shutdown
halt::7:0:halt:/sbin:/sbin/halt
mail::8:12:mail:/var/spool/mail:/sbin/nologin
operator::11:0:operator:/root:/sbin/nologin
  1. 删除文件每行的倒数第二个单词。
[root@scott ~]# sed -r 's/([a-Z]+)([^a-Z])([a-Z]+)$/\2\3/g' /test/dir/multicom.txt
root:x:0:0:root:/root://bash
bin:x:1:1:bin:/bin://nologin
daemon:x:2:2:daemon:/sbin://nologin
adm:x:3:4:adm:/var/adm://nologin
lp:x:4:7:lp:/var/spool/lpd://nologin
sync:x:5:0:sync:/sbin://sync
shutdown:x:6:0:shutdown:/sbin://shutdown
halt:x:7:0:halt:/sbin://halt
mail:x:8:12:mail:/var/spool/mail://nologin
operator:x:11:0:operator:/root://nologin
  1. 删除文件每行的最后一个单词。
[root@scott ~]# sed -r 's/([^a-Z])([a-Z]+)$/\1/g' /test/dir/multicom.txt
root:x:0:0:root:/root:/bin/
bin:x:1:1:bin:/bin:/sbin/
daemon:x:2:2:daemon:/sbin:/sbin/
adm:x:3:4:adm:/var/adm:/sbin/
lp:x:4:7:lp:/var/spool/lpd:/sbin/
sync:x:5:0:sync:/sbin:/bin/
shutdown:x:6:0:shutdown:/sbin:/sbin/
halt:x:7:0:halt:/sbin:/sbin/
mail:x:8:12:mail:/var/spool/mail:/sbin/
operator:x:11:0:operator:/root:/sbin/
  1. 交换每行的第一个字符和第二个字符。
[root@scott ~]# sed -r 's/^([a-z])([a-z])/\2\1/g' /test/dir/multicom.txt
orot:x:0:0:root:/root:/bin/bash
ibn:x:1:1:bin:/bin:/sbin/nologin
ademon:x:2:2:daemon:/sbin:/sbin/nologin
dam:x:3:4:adm:/var/adm:/sbin/nologin
pl:x:4:7:lp:/var/spool/lpd:/sbin/nologin
ysnc:x:5:0:sync:/sbin:/bin/sync
hsutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
ahlt:x:7:0:halt:/sbin:/sbin/halt
amil:x:8:12:mail:/var/spool/mail:/sbin/nologin
poerator:x:11:0:operator:/root:/sbin/nologin
  1. 交换每行的第一个字符和第二个单词。
[root@scott ~]# sed -r 's/^([a-z])([a-z]+)([^a-z])([a-z]+)/\4\2\3\1/g' /test/dir/multicom.txt
xoot:r:0:0:root:/root:/bin/bash
xin:b:1:1:bin:/bin:/sbin/nologin
xaemon:d:2:2:daemon:/sbin:/sbin/nologin
xdm:a:3:4:adm:/var/adm:/sbin/nologin
xp:l:4:7:lp:/var/spool/lpd:/sbin/nologin
xync:s:5:0:sync:/sbin:/bin/sync
xhutdown:s:6:0:shutdown:/sbin:/sbin/shutdown
xalt:h:7:0:halt:/sbin:/sbin/halt
xail:m:8:12:mail:/var/spool/mail:/sbin/nologin
xperator:o:11:0:operator:/root:/sbin/nologin
  1. 交换每行的第一个单词和最后一个单词。
[root@scott ~]# sed -r 's/^([a-z]+)([^a-z]+)(.*)([^a-z]+)([a-z]+)$/\5\2\3\4\1/g' /test/dir/multicom.txt
bash:x:0:0:root:/root:/bin/root
nologin:x:1:1:bin:/bin:/sbin/bin
nologin:x:2:2:daemon:/sbin:/sbin/daemon
nologin:x:3:4:adm:/var/adm:/sbin/adm
nologin:x:4:7:lp:/var/spool/lpd:/sbin/lp
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
nologin:x:8:12:mail:/var/spool/mail:/sbin/mail
nologin:x:11:0:operator:/root:/sbin/operator
  1. 删除一个文件中所有的数字。
[root@scott ~]# sed -r 's/[0-9]+//g' /test/dir/multicom.txt
root:x:::root:/root:/bin/bash
bin:x:::bin:/bin:/sbin/nologin
daemon:x:::daemon:/sbin:/sbin/nologin
adm:x:::adm:/var/adm:/sbin/nologin
lp:x:::lp:/var/spool/lpd:/sbin/nologin
sync:x:::sync:/sbin:/bin/sync
shutdown:x:::shutdown:/sbin:/sbin/shutdown
halt:x:::halt:/sbin:/sbin/halt
mail:x:::mail:/var/spool/mail:/sbin/nologin
operator:x:::operator:/root:/sbin/nologin
  1. 删除每行开头的所有空格。
[root@scott ~]# sed -r 's/^ *//g' /test/dir/multicom.txt
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
  1. 用制表符替换文件中出现的所有空格。
[root@scott ~]# sed -r 's/ /|/g' /test/dir/multicom.txt
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
  1. 把所有大写字母用括号()括起来。
    sed -r 's/[A-Z]/(&)/g' /etc/passwd
    所有数字()
[root@scott ~]# sed -r 's/[0-9]/(&)/g' /test/dir/multicom.txt
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):(1)(2):mail:/var/spool/mail:/sbin/nologin
operator:x:(1)(1):(0):operator:/root:/sbin/nologin
  1. 打印每行3次。
[root@scott ~]# sed -r '{p;p}' /test/dir/multicom.txt
root:x:0:0:root:/root:/bin/bash
root:x:0:0:root:/root:/bin/bash
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
bin:x:1:1:bin:/bin:/sbin/nologin
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
sync:x:5:0:sync:/sbin:/bin/sync
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
halt:x:7:0:halt:/sbin:/sbin/halt
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
  1. 只显示每行的第一个单词。
[root@scott ~]# sed -r 's/^([a-z]+)([^a-z])(.*)/\1/g' /test/dir/multicom.txt
root
bin
daemon
adm
lp
sync
shutdown
halt
mail
operator

17.打印每行的第一个单词和第三个单词。

[root@scott ~]# sed -r 's/^([a-Z]+)([^a-Z]+)([a-Z]+)([^a-Z]+)([a-Z]+)(.*)/\5/g' /test/dir/multicom.txt
root
bin
daemon
adm
lp
sync
shutdown
halt
mail
operator
  1. 用命令获取格式为 mm/yy/dd 的日期格式,结合管道,将其换成 mm;yy;dd格式

<wiz_tmp_tag id="wiz-table-range-border" contenteditable="false" style="display: none;">

 

转载于:https://www.cnblogs.com/scott-lv/p/7487334.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值