IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 系统运维 -> Linux命令整理(二) -> 正文阅读

[系统运维]Linux命令整理(二)

Linux命令整理(二)

8、正则表达式与文件格式化处理

8.1、基础正则表达式

特殊符号代表意义
[:alnum:]代表英文大小写字符及数字,亦即 0-9,A-Z,a-z
[:alpha:]代表任何英文大小写字符,亦即 A-Z,a-z
[:blank:]代表空格键与 [Tab] 按键两者
[:cntrl:]代表键盘上面的控制按键,亦即包括 CR,LF,Tab,Del … 等等
[:digit:]代表数字而已,亦即 0-9
[:graph:]除了空格符(空格键与 [Tab] 按键)外的其他所有按键
[:lower:]代表小写字符,亦即 a-z
[:print:]代表任何可以被打印出来的字符
[:punct:]代表标点符号(punctuation symbol),亦即:‘ “ ? ! ; : # $ …
[:upper:]代表大写字符,亦即 A-Z
[:space:]任何会产生空白的字符,包括空格键,[Tab],CR 等等
[:xdigit:]代表 16 进位的数字类型,因此包括:0-9,A-F,a-f 的数字与字符

8.2、grep 的一些进阶选项

[root@MiWiFi-R4A-srv ~]# grep [-A] [-B] [--color=auto] '搜寻字符串' filename
选项与参数:
-A	:	后面接数字,为 after 的意思,除了列出该行外,后续的 n 行也列出来;
-B	:	后面接数字,为 before 的意思,除了列出该行外,前面的 n 行也列出来;
--color=auto	:	可将正确的那个列出颜色

基础正则表达式字符汇总

RE 字符意义与示范
^word意义:待搜索的字符串(word)在行首!
范例:搜寻行首为 # 开始的那一行,并列出行号:
grep -n ‘^#’ filename
word$意义:待搜寻的字符串(word)在行尾!
范例:将行尾 ! 的那一行打印出来,并列出行号
grep -n ‘!$’ filename
.意义:代表 “一定有一个任意字符” 的字符!
范例:搜寻的字符串可以是(eve)(eae)(eee)(e e),但不能仅有(ee)!亦即:e 与 e 之间 “一定” 仅有一个字符,而空格也是字符!
grep -n ‘e.e’ filename
\意义:转义字符,将特殊符号的特殊意义去除!
范例:搜寻含有单引号 ‘ 的那一行!
grep -n \’ filename
*意义:重复零个到无穷多个的前一个 RE 字符
范例:找出含有(es)(ess)(esss)等等的字符串!注意,因为 * 可以是 0 个,所以 es 也是符合的。任意字符可以是 “.*”!
grep -n ‘ess*’ filename
[list]意义:字符集合的 RE 字符,里面列出想要的截取的字符!
范例:搜寻含有(gl)或(gd)的那一行,需要特别留意的是,在 [] 当中 “谨代表一个待搜寻的字符”。
grep -n ‘g[ld]’ filename
[n1-n2]意义:字符集合的 RE 字符,里面列出想要的截取的字符范围。
范例:搜寻含有任意数字的那一行!
grep -n ‘[A-Z]’ filename
[^list]意义:字符集合的 RE 字符,里面列出来不要的字符串或范围!
范例:搜寻的字符串可以是(oog)(ood)但不能是(oot)。
grep -n ‘oo[^t]’ filename
\{n,m\}意义:连续 n 到 m 个的 “前一个 RE 字符”
意义:若为 \{n\} 则是连续 n 个的前一个 RE 字符
意义:若为 \{n,\} 则是连续 n 个以上的前一个 RE 字符。
范例:在 g 和 g 之间有 2 个到 3 个的 o 存在的字符串,亦即(goog)(gooog)
grep -n ‘go\{2,3\}g’ filename

8.3、sed 工具

[root@MiWiFi-R4A-srv ~]# sed [-nefri] [动作]
选项与参数:
-n	:	使用安静模式。在一般的 sed 用法中,所有来自 STDIN 的数据一般都会被列出到屏幕上。如果加上 -n 参数后,只有经过处理的那一行才会被列出来
-e	:	直接在指令列模式上进行 sed 的动作编辑
-f	:	直接将 sed 的动作写在一个文件内
-r	:	sed 的动作支持的是延伸的正则表达式

-i	:	直接修改读取文件内容,而不是屏幕输出

动作说明:	'[n1[,n2]]function'(一定要有单引号)
n1,n2	:	不见得存在,一般代表 “选择进行动作的行数”

function:
a	:	新增,a 的后面可以接字符串,而这些字符串会在新的一行出现(目前的下一行)
c	:	取代,c 的后面可以接字符串,这些字符串可以取代 n1,n2 之间的行
d	:	删除
i	:	插入,i 后面可以接字符串,而这些字符串会在新的一行出现(目前的上一行)
p	:	打印,通常 p 会将参数 sed -n 一起出现
s	:	取代,可以直接进行取代的工作。通常这个 s 的动作可以搭配正则表达式
sed 's/要被取代的字符串/新的字符串/g'

8.4、延伸的正则表达式

grep 预设仅支持基础正则表达式,如果想要使用延伸的正则表达式,可以使用延伸的正则表达式:

RE 字符意义与范例
+意义:重复 “一个或一个以上” 的前一个 RE 字符
范例:搜寻(god)(good)(goood)… 等等的字符串。那个 o+ 代表 “一个以上的 o” 。
egrep -n ‘go+d’ filename
?意义:“零个或一个” 的前一个 RE 字符
范例:搜寻(gd)(god)这两个字符串。那个 o? 代表 “空的或 1 个 o”。
egrep -n ‘go?d’ filename
|意义:用或(or)的方式找出数个字符串
范例:搜寻 gd 或 good 这两个字符串,注意,是 “或”!
egrep -n ‘gd|good’ filename
()意义:找出 “群组” 字符串
范例:搜寻(gald)或(good)这两个字符串,因为 g 与 d 是重复的
egrep -n ‘g(la|oo)d’ filename
()+意义:多个重复群组的判别
范例:将 “AxyzxyzxyzxyzC” 用 echo 叫出
echo ‘AxyzxyzxyzxyzC’ | egrep ‘A(xyz)+C’

9、文件格式化与相关处理

9.1、格式化打印:printf

[root@MiWiFi-R4A-srv ~]# printf '打印格式' 实际内容
选项与参数:
关于格式方面的几个特殊样式:
	\a		警告声音输出
	\b		退格键
	\f		清除屏幕
	\n		输出新的一行
	\r		即 Enter 键
	\t		水平的 tab 键
	\v		垂直的 tab 键
	\xNN	NN 为两位数字,可以转换数字为字符
关于 C 语言内,常见的变数格式:
	%ns		那个 n 是数字,s 代表 string,即多少字符
	%ni		那个 n 是数字,i 代表 int,即多少整数字数
	%N.nf	小数

9.2、awk:好用的数据处理工具

[root@MiWiFi-R4A-srv ~]# awk '条件类型1{动作1} 条件类型2{动作2} ...' 文件名

awk 主要是处理 “每一行的字段内的数据”,而默认的 “字段的分隔符为 “空格键” 或 “[tab]键” ”。

[root@MiWiFi-R4A-srv ~]# last -n 5
root     pts/0        10.0.0.100       Fri Aug  7 08:26   still logged in
reboot   system boot  3.10.0-1127.el7. Fri Aug  7 08:24 - 09:04  (00:39)
root     pts/0        li-911m.lan      Thu Aug  6 15:40 - crash  (16:44)
reboot   system boot  3.10.0-1127.el7. Thu Aug  6 15:40 - 09:04  (17:23)
root     pts/0        li-911m.lan      Thu Aug  6 08:56 - crash  (06:43)
#取出账号与账号的 IP
[root@MiWiFi-R4A-srv ~]# last -n 5 | awk '{print $1 "\t" $3}'
root    10.0.0.100
reboot  boot
root    li-911m.lan
reboot  boot
root    li-911m.lan

整个 awk 的处理流程:

  • 读入第一行,并将第一行的资料填入 $0,$1,$2,…当中;
  • 依据 “条件类型” 的限制,判断是否需要进行后面的 “动作”;
  • 做完所有的动作与条件类型;
  • 若还有后续的 “行” 的数据,则重复前面的 1~3 步骤,直到所有的数据全部读完为止。

awk 是 “以行为一次处理的单位”,而 “以字段为最小的处理单位”。那 awk 怎么知道这个数据到底有几行?这就需要 awk 的内建变量的帮忙:

变量名称说明
NF每一行($0)拥有的字段总数
NR目前 awk 所处理的是 “第几行” 的意思
FS目前的分隔字符,默认是空格

awk 的逻辑运算符:

运算单元说明
>大于
<小于
>=大于等于
<=小于等于
==等于
!=不等于

9.3、文件比对工具

  • diff

    diff 就是比对两个文件的差异,并且是以行为单位来比对的!一般用在 ASCII 纯文本文件的比对上。由于是以行为单位进行比对的,因此 diff 通常是用在同一文件(或软件)的新旧版本差异上

    [root@MiWiFi-R4A-srv ~]# diff [-bBi] from-file to-file
    选项与参数:
    from-file	:	原始比对文件
    to-file	:	目的比对文件
    from-file 或 to-file 可以用 - 取代
    
    -b	:	忽略一行当中,仅有多个空白的差异
    -B	:	忽略空白行的差异
    -i	:	忽略大小写的差异
    
  • cmp

    cmp 主要是以字节来比较

    [root@MiWiFi-R4A-srv ~]# cmp [-l] 文件1 文件2
    选项与参数:
    -l	:	将所有不同点的字节列出来。因为 cmp 默认仅列出第一个不同点
    
  • patch

    patch 与 diff 之间密不可分。diff 用来比较两个文件之间的差异,那如何升级呢?就是 “先比较新旧版本的差异,并将差异文档做成补丁,再由补丁更新旧文件” 即可。

    范例一:以 /tmp/testpw 内的 passwd.old 与 passwd.new 制作补丁文件
    [root@MiWiFi-R4A-srv ~]# diff -Naur passwd.old passwd.new > passwd.patch
    [root@MiWiFi-R4A-srv ~]# cat passwd.patch
    --- passwd.old  2020-08-07 09:29:25.309779367 +0800	<== 新旧文件的信息
    +++ passwd.new  2020-08-07 09:30:05.133777094 +0800
    @@ -1,9 +1,8 @@
     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
    +no six line
     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
    
    [root@MiWiFi-R4A-srv ~]# patch -pN < patch_file		#更新
    [root@MiWiFi-R4A-srv ~]# patch -R -pN < patch_file		#还原
    选项与参数:
    -p	:	后面接 “取消几层目录” 的意思
    -R	:	代表还原,将新的文件还原成原来旧的版本
    
    #更新文件
    [root@MiWiFi-R4A-srv ~]# patch -p0 < passwd.patch
    patching file passwd.old
    [root@MiWiFi-R4A-srv ~]# ll passwd*
    -rw-r--r--. 1 root root 778 87 09:30 passwd.new
    -rw-r--r--. 1 root root 778 87 09:43 passwd.old		#文件完全一样了
    #还原文件
    [root@MiWiFi-R4A-srv ~]# patch -R -p0 < passwd.patch
    patching file passwd.old
    [root@MiWiFi-R4A-srv ~]# ll passwd*
    -rw-r--r--. 1 root root 778 87 09:30 passwd.new
    -rw-r--r--. 1 root root 835 87 09:44 passwd.old		#不一样了
    

10、学习 Shell Scripts

  系统运维 最新文章
配置小型公司网络WLAN基本业务(AC通过三层
如何在交付运维过程中建立风险底线意识,提
快速传输大文件,怎么通过网络传大文件给对
从游戏服务端角度分析移动同步(状态同步)
MySQL使用MyCat实现分库分表
如何用DWDM射频光纤技术实现200公里外的站点
国内顺畅下载k8s.gcr.io的镜像
自动化测试appium
ctfshow ssrf
Linux操作系统学习之实用指令(Centos7/8均
上一篇文章      下一篇文章      查看所有文章
加:2021-09-03 12:21:05  更:2021-09-03 12:22:40 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/15 13:30:03-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码