详明正则表明式及Linux三大文本管理工科具,正则表明式linux

cat命令:查看文本内容

详细明白正则表达式及Linux三大文本管理工具,正则表明式linux

grep、sed和awk都以文本管理工具,就算都以文本管理工科具但却都有分其余利害,大器晚成种文本处理命令是无法被另一个截然替换的,不然也不会不能自已七个文本管理命令了。

后生可畏、正则表明式

1、相配字符的项目

[a-z]:小写字母

[A-Z]:大写字母

[a-Z]:小或大写字母

[0-9]:数字

[a-zA-Z0-9]:表示相当三个为字母或数字的字符

. :相配1个随机字符,空格除却

[0-f]:16进制数

abc | def:abc或def
a (bc | de) f:abcf 或 adef

\<:单词头 单词平日以空格或特殊字符做分隔,接二连三的字符串被看成单词

\>:单词尾

[^表达式]:除小写字母以外的所有字符,如此类推。

2、后跟以下符号调节拾壹分的数据

此类符号的右边要有地点第一点的表达式

奥门威尼斯网址,表达式*:0或n个字符

表达式+:1或n个字符

表达式?:0或1个字符

表达式{n}:n个字符

表达式{n:m}:n到m个字符

表达式{n,}:至少n个字符

【例】[a-z]*意味着相称0个或四个小写字母

3、将杰出的字符调整在头尾
^表明式:尾部符合

发表式$:尾部符合

二、Linux三大文本管理工科具

1、egrep 筛选工具

grep的扩充版,能够行使正则表达式

语法:

egrep -选项  ‘正则表达式’  文件名

选项:

-n :显示行号
-o :只显示相配的从头到尾的经过
-q
:静默情势,未有其他输出,得用$?来决断施行成功并未有,即有未有过滤到想要的情节
-l
:即使合营成功,则只将文件名打字与印刷出来,退步则不打印,平常-rl一同用,grep
-rl ‘root’ /etc
-A :假如相配成功,则将相称行及其后n行一齐打字与印刷出来
-B :若是相配成功,则将相配行及其前n行一同打字与印刷出来
-C :要是相称成功,则将相配行及其前后n行一起打字与印刷出来
–color
-c :借使同盟成功,则将相称到的行数打字与印刷出来
-i :忽略大小写
-v :取反,不匹配
-w:相配单词

2、sed 流编辑器

语法:

语法1:sed  -选项  ‘数字定位+命令’  文件名

选项:

-n:静默形式,不出口
-e:多项编辑,那个不是很领悟
-i:直接改变文件内容,并非出口
-r:扩大形式,可使用正则表明式
-f:钦命文件名,将动作写在新的文件内

命令:

a ∶ 追加append,
c ∶ 改变change,
d ∶ 删除delete,
i ∶ 插入insert, i
的后面能够接字串,而这一个字串会在新的生机勃勃行现身(前段时间的上生机勃勃行卡塔尔(英语:State of Qatar)
p∶ 列印print
s∶ 替代substitute,能够一向开展轮番的办事。日常那么些 s
的动作能够搭配正则表明式。举个例子 1,20s/old/new/g

*s命令特别表明:

使用{命令1:命令2:命令3}可扩大应用八个指令

语法2:sed  -r  ‘替换命令s/正则表明式/替换内容/贪婪选项g’  文件名

恒定的三种格局:

①数字定位(输入行序号定位)

十进制数
1:单行
1,3:范围 从第风姿洒脱行到第三行
2,+4:相称行后若干行
4,~3:从第四行到下一个3的倍数行
2~3:第二行起每隔三行的行
$:尾行
1!:除了第风流洒脱行以外的行

【例】sed -n ‘1p’ /etc/passwd

②正则表达式定位

正则必得用//包裹起来

恢宏正则须要用 -r 参数或转义

轮番可选择正则表明式的子格局,即小括号(),能够\1、\2代表子方式

【例】sed -r ‘s/(.)(.)/\2\1/ file1
表示将十三分到的第一片段和第二部分替换

*贪滥无厌选项:填上g,代表把生机勃勃行中享有相称项替换

3、awk 文本分析工具

由命令、正则(须求用//包围起来)、比较和涉及运算组合而成

行使option中的-F参数定义间隔符号

用$1,$2,$3等的次第表示files中每行以间距符号分隔的各列分裂域,NF变量表示近期记下的字段数

语法

awk -选项 参数  ‘逻辑推断{命令 变量1,变量2,变量3}’ 文件名

选项

-F 定义字段分隔符,暗许的相间符是三番两次的空格或制表符
-v 定义变量并赋值 也得以借用次艺术从shell变量中引进

AWK变量

N智跑 当前记录的个数(全部文本三番五次后的总结卡塔尔(英语:State of Qatar)
FN昂科威 当前记录的个数(仅为方今文件的计算,非全体卡塔尔国
FS 字段分隔符 默感到一而再三番三次空格或制表符,能够应用多少个例外的符号做分隔符
-F[:/]
OFS 输出字符的相间符 暗中同意是空格
# awk -F: ‘OFS=”=====” {print $1,$2}’ /etc/passwd
root=====x
NF 当前读入行的字段个数
OPAJEROS 输出记录分隔符 暗中认可是换行
# awk -F: ‘ORS=”=====” {print $1,$2}’ /etc/passwd
root x=====bin x=====
FILENAME 当前文件名

【例1】使用AWK变量

# awk '{print NR,FNR,$1}' file1 file2 
1 1 aaaaa
2 2 bbbbb
3 3 ccccc
4 1 dddddd
5 2 eeeeee
6 3 ffffff
# 

【例2】引用shell变量的法子

# a=root
# awk -v var=$a -F: '$1 == var {print $0}' /etc/passwd
或者 把整个命令拆开传递,让shell变量外露,
# awk -F: '$1 == "'$a'" {print $0}' /etc/passwd
# a=NF
# awk -F: '{print $'$a'}' /etc/passwd

逻辑运算(可一向援用域进行演算)

= += -= /= *= 赋值

&& || ! 逻辑与 逻辑或 逻辑非

~ !~  相称正则或不相称,正则必要用 /正则/ 包围住
< <= > >= != ==  关系 比较字符串时要把字符串用双引号引起来

$ 字段引用:字段引用须求加$,而变量征引直接用变量名取

+ – * / % ++ —  运算符

转义系列

\\ \自身
\$ 转义$
\t 制表符
\b 退格符
\r 回车符
\n 换行符
\c 撤除换行

上述所述是笔者给大家介绍的正则表明式及Linux三大文本管理工科具,希望对我们具备利于,尽管大家有其余疑问请给自己留言,笔者会及时回复大家的。在那也非常多谢咱们对帮客之家网址的帮衬!

grep、sed和awk都以文本处理工科具,即便都是文本管理工科具但却皆某个的利害,…

        
cat [选项]… [文件]…

        
-E    呈现行终止符

        
-n    展现文本内容时展现行号

        
-A    突显所以调节符

        
-b    非空行编号

        
-s     压缩接二连三的空行成意气风发行

[root@bogon ~]# cat -n /etc/issue > test.txt    ##查看文件内容并显示行号,重定向到test.txt文件中
[root@bogon ~]# cat test.txt 
     1    \S
     2    Kernel \r on an \m
     3    

[root@bogon ~]# cat > file <<EOF    ##创建file文件,输入内容以EOF结束
> kernel \r on an \m
> EOF
[root@bogon ~]# cat file 
kernel \r on an \m

more       分页显示

         more [OPTIONS…] FILE…

less  分页突显,是man命令使用的分页器

[root@bogon ~]# less /etc/httpd.conf 
[root@bogon ~]# cat /etc/httpd.conf |more

head命令 : 

        
head [OPTION]… [FILE]…

    -n  展现文件前n行,暗中认可显示前10行

    -c
# 展现文件前#个字节内容

    -q  不出示包括给定文件名的公文头

[root@bogon ~]# head -5 /etc/fstab     ##显示文件前5行
#
# /etc/fstab
# Created by anaconda on Mon May  1 04:49:06 2017
#

[root@bogon ~]# head -q -n 5 /etc/fstab /etc/issue    ##显示多个文件前5行,并且不显示文件头

#
# /etc/fstab
# Created by anaconda on Mon May  1 04:49:06 2017
#
\S
Kernel \r on an \m  

tail命令:

tail
[OPTION]… [FILE]…

        
-f   实时翻看,常用监察和控制日志文件

   -c
#   显示后#字节

   -n
#  显示后#行,默许突显行10行

[root@bogon ~]# tail -2 /etc/passwd    ##显示文件后2行
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
apache:x:48:48:Apache:/usr/share/httpd:/sbin/nologin
[root@bogon ~]# tail -f /var/log/messages    ##不停地去读最新的内容,有实时监视的效果,用Ctrl+c来终止

May 2 02:46:26 localhost systemd: Configuration file /usr/lib/systemd/system/wpa_supplicant.service is marked executable. Please remove executable permission bits. Proceeding anyway. May 2 02:46:26 localhost yum[16325]: Installed: httpd-2.4.6-45.el7.centos.4.x86_64 May 2 03:01:01 localhost systemd: Started Session 10 of user root. May 2 03:01:01 localhost systemd: Starting Session 10 of user root. May 2 03:45:49 localhost systemd-logind: Removed session 4. May 2 03:46:20 localhost systemd: Started Session 11 of user root. May 2 03:46:20 localhost systemd-logind: New session 11 of user root. May 2 03:46:20 localhost systemd: Starting Session 11 of user root. May 2 04:01:01 localhost systemd: Started Session 12 of user root. May 2 04:01:01 localhost systemd: Starting Session 12 of user root.

 cut命令:

cut
[OPTION]… [FILE]…

  -d 
指明分隔符,默许tab

  -f
 第# 个字段

  #,#[,#]
:离散的多少个字段,例如1,3,6

  #-#
:三番五次的五个字段,  举例1-6

  混合使用:1-3,7

  -c
按字符切割

  –output-delimiter=STENVISIONING钦赐输出分隔符

 显示文件前10行,以“:”作为分隔符打字与印刷第1和第7个字段并分隔符换到空格输出:

[root@bogon ~]# head /etc/passwd |cut -d ":" -f1,7 --output-delimiter="   "  ##查看系统用户使用的shell
root   /bin/bash      
bin   /sbin/nologin
daemon   /sbin/nologin
adm   /sbin/nologin
lp   /sbin/nologin
sync   /bin/sync
shutdown   /sbin/shutdown
halt   /sbin/halt
mail   /sbin/nologin
operator   /sbin/nologin

[root@bogon ~]# ip addr |tail -4 |head -1 |cut -d "/" -f1 |cut -d " " -f6  ##获取ip地址
192.168.25.102

paste命令:

  paste
[OPTION]… [FILE]…

  -d 
分隔符: 钦命分隔符,私下认可用TAB

  -s
    所以行统10%生龙活虎行显示

[root@bogon ~]# paste /etc/resolv.conf /etc/issue    ##合并输出两个文件的内容
# Generated by NetworkManager    \S
nameserver 202.106.46.151    Kernel \r on an \m
nameserver 202.106.195.68    
[root@bogon ~]# paste -s /etc/issue    ##对输出的内容独立占一行
\S    Kernel \r on an \m    

wc命令:总括文件内容

        
-l      总括行数

        
-w    总结单词个数

        
-c     总结字节数

        
-m    只计数字符总的数量

   
 -L  打字与印刷最长行的长度

[root@bogon ~]# cat /etc/passwd |wc -l  ##统计文件的行数
22
[root@bogon ~]# echo "aaa bbb ccc" |wc -w    ##统计输出的单词数量
3
[root@bogon ~]# echo "abcdef" |wc -m    ##统计输出有多少个字节
7

文件排序:sort [options] file(s)

  -r   逆序排序

  -n   根据字符串数值进行比较

  -f   忽视字符大小写

  -u   去重。同盟-c,严苛校验排序;不相称-c,则只输出贰回排序结果

  -t   使用钦定的相间符代替非空格到空格的调换

  -k
1 在职位1 上马一个key,在职位2 平息(默感觉行尾卡塔尔(英语:State of Qatar)

[root@bogon ~]# head /etc/passwd |sort -t ":" -k 3nr    ##以“:”分割对第三个字段数值进行倒序排列
operator:x:11:0:operator:/root:/sbin/nologin
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
halt:x:7:0:halt:/sbin:/sbin/halt
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
sync:x:5:0:sync:/sbin:/bin/sync
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
bin:x:1:1:bin:/bin:/sbin/nologin
root:x:0:0:root:/root:/bin/bash
[root@bogon ~]# cat /etc/passwd |sort -t':' -k 7 -u    ##以“:”分割对第7个字段排序,去重
root:x:0:0:root:/root:/bin/bash
sync:x:5:0:sync:/sbin:/bin/sync
halt:x:7:0:halt:/sbin:/sbin/halt
bin:x:1:1:bin:/bin:/sbin/nologin
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown

uniq 命令:从输入中除去重复的光景持续的行

   uniq
[OPTION]… [FILE]…

  -c: 
展现每行重复现身的次数;

  -d: 
仅显示重复过的行;

  -u:
 仅呈现唯风流倜傥的行;

  -i:
 比较时不区分朗朗上口写

[root@bogon ~]# uniq -c ip.txt     ##显示重复行出现的次数,相邻行且完全一样为重复
      3 101.200.78.99
      1 103.41.52.94
      2 106.185.47.161
      1 101.200.78.99
      2 113.240.250.155
      1 13.0.782.215
      1 185.130.5.231

文件比较:

diff命令:相比多个文本之间的分歧

  -r  递归比较

  -u
 输出“统一的(unified )

  patch
命令复制在任何文件中开展的改观(要谨慎小心接受!)

  -b
  选项来自动备份改换了的文本

[root@bogon ~]# diff file1.txt file2.txt 
8c8      ##表示第8行有区别
< 113.240.250.155
---
> 133.240.250.155

轮换和删除字符:

        
tr [OPTION]… SET1 [SET2]

                  
-c 或——complerment :取字符集的补集

                  
-d 或——delete :删除全数归于第一字符集的字符;

                  
-s 或—squeeze-repeats :把一连重复的字符以单唯二个字符表示

                  
-t 或–truncate-set1 :先删除第一字符集较第二字符集多出的字符

[root@bogon ~]# tr -s '\n'  < file1.txt     ##删除空行
103.41.52.94
106.185.47.161
\S
Kernel \r on an \m
106.185.47.161
[root@bogon ~]# tr  A-Z a-z < file1.txt     ##把大写字母换成小写
103.41.52.94
106.185.47.161
\s
kernel \r on an \m

106.185.47.161
grep命令:过滤文本内容

        
grep [OPTIONS] PATTERN [FILE…]

        
-i       查找时忽略大小写

        
-v     取反

    -n
     突显相称的行号

  
  -c     总计相配的行数

  
 -o     仅突显相配到的字符串;

  
 -q    静默方式,不出口任何音信

  -A
#   after,  后#行 行

  -B
#  before,  前#行 行

  -C
#   context,  前后各#行 行

  -e
  完结七个筛选间的逻辑or 关系

  -w
  整行相称整个单词

  -E
  使用扩张正则表达式

正则表明式:

.     相配自便单个字符;

[]    相称内定范围内的即兴单个字符

[^]  相称钦命范围外的妄动单个字符

*   相配后边的字符率性次,包含0次 次贪婪形式:尽大概长的相配

.*   狂妄长度的自由字符

\?   相称其眼下的字符0 或1次 

\+   相称其前方的字符起码1次

\{m\}   匹配前边的字符m次 

\{m,n\}   相配后面包车型客车字符最少m 次,至多n次 

\{,n\}   相称前边的字符至多n次 次

\{m,\}   相称前面的字符最少m次

^   行首锚定,用于格局的最左侧

$   行尾锚定,用于情势的最右面

^PATTELacrosseN$  用来形式相配整行

^$   空行

^[[:space:]]*$   空白行

\< 或 或 \b   词首锚定,用于单词形式的左侧

\> 或 或 \b   词尾锚定;用于单词形式的左侧

\<PATTERN\>   相称整个单词

\(\卡塔尔(قطر‎    将三个或多少个字符捆绑在联合,当做八个整机进行拍卖

[:alpha:] 全体字母,包罗大、小写

[:alnum:] 全部字母和数字

[:upper:] 全体大写字母

[:lower:] 全数小写字母

[:digit:] 全数数字

[:punct:] 全数标点符号

[:space:] 空格和Tab

 

扩大正则表明式:

.    率性单个字符

[]    钦定范围的字符

[^]    不在钦定范围的字符

*   相称前面字符任意次

?   0 或1次 次

+   1 次或频繁

{m}   匹配m次 

{m,n}   至少m ,至多n次 

^  行首

$   行尾

\<, \b  语首

\>, \b    语尾

分组  ()

  后向援引:\1, \2, …

     或者:a|b

     C|cat: C 或cat

     (C|c)at:Cat 或cat

[root@bogon ~]# grep '^\(root\|apache\)' test.txt   ##过滤以root或apache开头的行
root:x:0:0:root:/root:/bin/bash
apache:x:48:48:Apache:/usr/share/httpd:/sbin/nologin
[root@bogon ~]# grep -R /sbin/nologin *     ##递归从所以文件中查询匹配的内容
test.txt:bin:x:1:1:bin:/bin:/sbin/nologin
test.txt:daemon:x:2:2:daemon:/sbin:/sbin/nologin

[root@bogon ~]# ip addr |grep "dynamic" |tr -s " " |cut -d " " -f3 |cut -d "/" -f1  ##过滤ip地址
192.168.25.102
[root@bogon ~]# ip addr |grep -E -o "([0-9]{1,3}[\.]){1,3}[0-9]{1,3}"
127.0.0.1
192.168.25.102
192.168.25.255

[root@bogon ~]# df -Th |tr -s " " |sort -k 6nr |head -1  ##查出使用率的最大百分比值的分区
/dev/sda1 xfs 497M 125M 373M 25% /boot

[root@bogon ~]# cat /etc/passwd  |sort -t ':' -k 3n |tail -1 |cut -d ":" -f1,3,7
systemd-bus-proxy:999:/sbin/nologin      ##找出uid最大值的用户,并显示用户名、UID、及shell类型

 

发表评论

电子邮件地址不会被公开。 必填项已用*标注