一. 文件属性分类

  文件属性分类:索引信息属主信息属组信息软硬链接时间信息权限信息类型信息大小信息[root@shiyi ~ 15:24:28]# ll -i /bonian/
51206131         d      rwxr-xr-x    2       root     root     57      Dec 13 09:18   bonian01
17391346         d      rwxr-xr-x    2       root     root     24      Dec 17 09:22   bonian02
索引 inode号   文件类型    文件权限    硬链接数    属主     属组    文件大小    文件时间

1. 文件属性索引信息:

inode 概念说明: 数据文件索引信息, 类似目录作用说明: 存储文件数据属性信息文件数据指针信息诞生过程: 格式化 --> 创建文件系统 --> 创建inode查看方法: df -i block 概念说明: 真正存储数据区域作用说明: 存储文件真正数据内容诞生过程: 格式化 --> 创建文件系统 --> 创建block查看方法: df索引节点是一个结构,它包含了一个文件的长度、创建及修改时间、权限、所属关系、磁盘中的位置等信息。一个文件系统维护了一个索引节点的数组,每个文件或目录都与索引节点数组中的唯一一个元素对应。系统给每个索引节点分配了一个号码,也就是该节点在数组中的索引号,称为索引节点号(也就是inode号)。文件储存在硬盘上,硬盘的最小存储单位叫做"扇区"(Sector)。每个扇区储存512字节(相当于0.5KB)。操作系统读取硬盘的时候,不会一个个扇区地读取,这样效率太低,而是一次性连续读取多个扇区,即一次性读取一个"块"(block)。这种由多个扇区组成的"块",是文件存取的最小单位。"块"的大小,最常见的是4KB,即连续八个 sector组成一个 block。文件数据都储存在"块"中,那么很显然,我们还必须找到一个地方储存文件的元信息,比如文件的创建者、文件的创建日期、文件的大小等等。这种储存文件元信息的区域就叫做inode,中文译名为"索引节点"。问题一:磁盘空间不够了: 如何处理思路一: 磁盘inode是否够用用来储存文件信息的inode已经耗尽,而block却未必用完思路二: 磁盘block是否够用问题二:一个数据会占用一个inode, 占用多个block一个block块是大点好 小点好说明: 10K文件  --> 1个block 4k --> 3个block  磁盘IO(input output)输入输出的次数, 决定磁盘性能 10M 消耗block少 IO次数少  硬盘性能没有影响 10G 消耗block多 IO次数多  硬盘性能会有下降  存储数据大文件数据  视频10G/图片/音频  block更大些 IO消耗减少 存储数据小文件数据  文档 代码          block更小些 节省磁盘空间
如何创建文件系统:  如何格式化      数据读取原理: inode block

2. 文件属性用户信息:

用户分类说明:  属主 属组 其他用户  oldboy.txt  -- 创造者 oldboy  rwx  属组   oldgirl olddog oldbaby  --> oldboy组  rw-alex tony kinve  r--系统用户分类:超级管理员    皇帝      root    user id  uid信息: 0虚拟用户       傀儡      nobody  uid: 1-999  centos7 特点01: 不能登录系统   管理服务进程信息uid: 1-499  centos6  特点02: 没有家目录普通用户     平民      oldboy   uid: 1000+  centos7  uid:  500+  centos6用户和用户组关系:1   vs 1    关系:  1个用户   属于 1个组1 vs 多    关系:  1个用户       属于 多个组多 vs 1    关系:  多个用户   属于 1个组  多   vs 多    关系:  多个用于   属于 多个组oldboy    --> /etc/hosts     -- oldbg 设置权限
oldgirl   --> /etc/hostsolddog    --> /etc/rc.local
oldbaby   --> /etc/rc.local

3. 文件属性链接信息:

软链接 硬链接
文件数据快捷方式 查看数据内容的门
软链接会指向源文件 硬链接会指向和源文件相同的inode号
如果源文件删除,则软链接失效 如果源文件删除,硬链接不受影响
可以给目录创建软链接 只能给普通文件创建硬链接
link[ln -s 源文件 软链接] link[ln 源文件 硬链接]
利用软连接进行文件快捷管理 减少开发人员工作量 利用硬链接对大文件进行备份 防止误删除

创建的目录------默认有2条硬链接
创建的文件------默认有1条硬链接

4. 文件属性时间信息:

属性分类:atime:  access time --- 访问时间mtime:  modify time --- 修改时间 ctime:  change time --- 改变时间stat 文件  --- 查看文件详细属性信息(详细时间信息)# cat oldboy.txt
# stat oldboy.txt
Access: 2020-01-23 01:00:09.122458448 +0800   --- 访问时间信息
Modify: 2020-01-23 00:59:32.244456300 +0800
Change: 2020-01-23 00:59:32.244456300 +0800# echo oldboy69 >oldboy.txt
# stat oldboy.txt
Access: 2020-01-23 01:00:09.122458448 +0800
Modify: 2020-01-23 01:01:30.050463164 +0800   --- 修改时间信息
Change: 2020-01-23 01:01:30.050463164 +0800   --- 影响文件大小属性# chmod 700 oldboy.txt
# stat oldboy.txt
Access: 2020-01-23 01:00:09.122458448 +0800
Modify: 2020-01-23 01:01:30.050463164 +0800
Change: 2020-01-23 01:03:27.084469984 +0800   --- 文件属性信息发生变化和时间有关的命令: timedatectl
date  --- 查看时间信息/设置修改时间查看时间信息:
指定时间显示格式: # date '+%Y-%m-%d %H:%M:%S 星期%w'
%Y: 年份信息
%m: 月份信息  ---> %F
%d: 日期信息%H: 小时信息
%M: 分钟信息  ---> %T
%S: 秒信息
cp /etc/hosts /etc/hosts.`date '+%F_%T_星期%w'`指定查看未来或过去时间:
date -d  "-n day"  --- 显示过去时间
date -d  "+n day"  --- 显示未来时间    修改时间信息:
date -s  "年份月份日期"
date -s  "小时分钟秒"

5. 文件属性大小信息:

 文件的属性中“大小”指的是,你的文件的容量,它有多大容量,就占多大内存,就像东西有多大体积,就占多大空间一样。 “大小”的单位有:EB,PB,TB,GB,MB,KB,B(字节)等1EB=1024PB 1PB=1024TB 1TB=1024GB1GB=1024MB  1MB=1024KB 1KB=1024B(字节) 1个汉字占两个字节1MB如果纯粹储存汉字的话可储存50万汉字.但硬盘标识为80G的话,实际没有这么大的,因为硬盘生产商一般是按1MB=1000KB计算的

6. 文件属性类型信息:

1. 查看文件类型的三种方法:ls-l/ls-ld 或者ll [ls-l —查看文件 ls-ld —查看路径 ll —-跟ls -l 一样]file 命令stat 命令2. 文件分类介绍(部分):普通文件:Linux中最多的一种文件类型, 包括 纯文本文件(ASCII);二进制文件(binary);数据格式的文件(data);各种压缩文件.第一个属性为 [-]文本文件:二进制文件(命令文件)数据文件(压缩文件)file 文件信息  --- 获取文件类型 d 目录文件:就是目录, 能用 # cd 命令进入的。第一个属性为 [d],例如 [drwxrwxrwx] l 连接文件(软链接):类似Windows下面的快捷方式。第一个属性为 [l],例如 [lrwxrwxrwx]c 字符流文件:字符设备文件:即串行端口的接口设备,例如键盘、鼠标等等。第一个属性为 [c]b block块文件           存储设备文件信息就是存储数据以供系统存取的接口设备,简单而言就是硬盘。例如一号硬盘的代码是/dev/hda1等文件。第一个属性为 [b]      s socket文件(网络编程):这类文件通常用在网络数据连接。可以启动一个程序来监听客户端的要求,客户端就可以通过套接字来进行数据通信。第一个属性为 [s],最常在 /var/run目录中看到这种文件类型 p FIFO(管道文件):一种特殊的文件类型,主要是解决多个程序同时存取一个文件所造成的错误。FIFO是first-in-first-out(先进先出)的缩写。第一个属性为 [p]3. 特殊扩展名标记文件xxx.txt    --- 文本文件 xxx.log    --- 日志文件xxx.conf   --- 配置文件xxx.sh     --- shell脚本文件xxx.py     --- python脚本文件xxx.zip/xxx.gz/xxx.tar.gz      --- 压缩文件xxx.db     --- 数据库文件 database 数据(表01 表02 表03)=库 == 更加完善 功能更强 excelxxx.rpm    --- 表示rpm安装包文件xxx.conf   --- 表示系统服务的配置文件xxx.html、.htm、.php、.jsp、.do  --- 表示网页语言的文件xxx.sh     --- 表示shell脚本文件,通过shell语言开发的程序。 xxx.pl     --- 表示perl语言文件,通过perl语言开发的程序。 xxx.py     --- 表示python语言文件,通过python语言开发的程序4. 补充: 和文件相关命令which    --- 查看命令文件保存路径  whereis  --- 查看命令文件保存路径 以及 查看命令相关文件保存路径locate   --- 快速检索一个文件保存的路径  == everythingyum install -y mlocateupdatedb
file命令:
命令作用:用来识别文件类型,也可用来辨别一些文件的编码格式。它是通过查看文件的头部信息来获取文件类型,而不是像Windows通过扩展名来确定文件类型的。
命令参数:-b        列出文件辨识结果时,不显示文件名称。-c        详细显示指令执行过程,便于排错或分析程序执行的情形-f        列出文件中文件名的文件类型-F        使用指定分隔符号替换输出文件名后的默认的":"分隔符。-i        输出mime类型的字符串-L        查看对应软链接对应文件的文件类型-z        尝试去解读压缩文件的内容
实战演练:    查看文件类型:file  文件      显示文件名称file -b  文件   不显示文件名称[root@shiyi bonian02 15:25:10]# file person.txt person.txt: ASCII text ==> 文本文件[root@shiyi bonian02 15:41:27]# file -b person.txt ASCII text显示mime类型的字符串:[root@shiyi bonian02 15:46:36]# file -i person.txt person.txt: text/plain; charset=us-ascii查看文件中的文件名的文件类型:[root@shiyi bonian02 15:52:28]# file -f person.txt 101,oldboy,CEO:   cannot open (No such file or directory)102,zhaoyao,CTO:  cannot open (No such file or directory)103,Alex,COO:     cannot open (No such file or directory)104,yy,CFO:       cannot open (No such file or directory)105,feixue,CIO:   cannot open (No such file or directory)106,oldboy,CRO:   cannot open (No such file or directory)107,zhaoyao,CQO:  cannot open (No such file or directory)108,Alex,CPO:     cannot open (No such file or directory)109,zhangsan,CNO: cannot open (No such file or directory)解读压缩文件:[root@shiyi ~ 15:54:52]# file -z /bonian/oldboy.tar.gz /bonian/oldboy.tar.gz: POSIX tar archive (GNU) (gzip compressed data, from Unix, last modified: Fri Dec 13 18:10:55 2019)查看软链接对应的文件的文件类型:[root@shiyi bonian02 15:59:15]# file -L bonian01_link/bonian01_link/: directory

7. 文件属性权限信息:

   rw-  r--  r--        文件权限包含9个权限位  12位权限属主 属组 其他用户属主:     读r 写w 执行x  - 没权限属组:     只有读权限 其他用户:  只有读权限  r-xr----    文件权限解释:  属主(读权限和执行权限)  属组(可读权限)    540                      其他用户(没有任何权限)rwxrw-rw-   文件权限解释:  属主(读写执行)         属组(读写)         766                      其他用户(读写)-w-r-xr--   文件权限解释:  属主(写权限)           属组(读权限和执行) 254                      其他用户(读权限) r - 4  每三位权限为一组, 做求和运算 数值进行输出w - 2 x - 1- - 0  666  670 776 771 --> 符号表示rw-rw-rw-  rw-rwx---  rwxrwxrw-  rwxrwx--x   0  ---  1  --x   2  -w- 3  -wx4  r-- 5  r-x6  rw- 7  rwx 1. 系统权限信息:r(4) 读权限:  · 文件信息: 内容信息可以读取· 目录信息: 查看目录数据信息w(2) 写权限· 文件信息: 内容信息可以编辑· 目录信息: 操作目录数据信息(删除数据/创建数据/移动数据/修改数据名称)x(1) 执行权限:· 文件信息: 文件可以进行执行  /etc/rc.local· 目录信息: 目录可以进行切换
2. 系统权限分配方式:rwx  第一组权限: 分配给属主用户rw-  第二组权限: 分配给属组用户r--  第三组权限: 分配给其他用户PS: 系统常用权限位: 9位权限位  实际是为12位  (面试)
3. 系统权限配置方法:rwx- 000~777 001 002 0034. 文件权限说明:1)没有权限管理员用户(root): 读、写权限都可以执行,但是没有执行权限。数据属主信息:      只有写权限可以执行,但是没有读和执行权限;且写权限不完全,会覆盖前一次的内容。数据其他用户:     任何权限都不能执行。2)只有读权限管理员用户(root):   读、写权限都可以执行,但是没有执行权限。数据属主信息:      读写权限都可以执行,但是没有执行权限。数据其他用户:       只有读权限可以执行,但是没有写和执行权限。3)只有写权限管理员用户(root):    读、写权限都可以执行,但是没有执行权限。数据属主信息:      只有写权限可以执行,但是没有读和执行权限;且写权限不完全,会覆盖前一次的内容。数据其他用户:     只有写权限可以执行,但是没有读和执行权限;且写权限不完全,会覆盖前一次的内容。4)只有执行权限管理员用户(root):   读、写和执行权限都可以执行。数据属主信息:        只有写权限可以执行,但是没有读和执行权限;且写权限不完全,会覆盖前一次的内容。数据其他用户:     任何权限都不能执行。5. 目录权限说明:1)没有权限管理员用户(root):   读、写和执行权限都可以执行。数据属主信息:        任何权限都不能执行。数据其他用户:        任何权限都不能执行。2)只有读权限管理员用户(root):   读、写和执行权限都可以执行。数据属主信息:        只有读权限可以执行,但是没有写和执行权限;且读权限不完全,不会显示inode信息,只有block信息。数据其他用户:      只有读权限可以执行,但是没有写和执行权限;且读权限不完全,不会显示inode信息,只有block信息。3)只有写权限管理员用户(root): 读、写和执行权限都可以执行。数据属主信息:        任何权限都不能执行。数据其他用户:        任何权限都不能执行。4)只有执行权限管理员用户(root):  读、写和执行权限都可以执行。数据属主信息:        只有执行权限可以执行,但是没有读和写权限。数据其他用户:     只有执行权限可以执行,但是没有读和写权限。======================================================================
进行权限修改:  chmod  权限信息  数据信息
属主修改权限: chmod u+/-/=  属主 user
属组修改权限: chmod g+/-/=  属组 group
其他用户修改: chmod o+/-/=  属组 other
同时三种用户都做权限修改:
rw-  r--  ---  chmod 640
======================================================================

二. 正则表达式

1. 正则符号信息

1)系统基础符号:美元符号:$用于取出变量中的内容[root@shiyi ~ 14:19:14]# abc=123[root@shiyi ~ 16:17:59]# echo $abc123用于取出指定列的信息(awk)表示用户命令提示符号[oldboy01@shiyi ~ 16:44:20]$ ----普通用户[root@shiyi ~ 16:44:25]# --------超级管理员表示一行的结尾叹号符号:!用于表示取反或者排除意思命令行中表示取出最近命令!awk(慎用)history|grep awk history -c -w ctrl+r 用于表示强制操作处理vim底行模式保存 退出 wq! q!竖线符号:| 表示管道符号,管道前面命令,交给管道后面执行经常配合xargs命令使用查找指定数据信息进行删除find /oldboy -type f -name "oldboy*.txt"|xargs rmfind /oldboy -type f -name "oldboy*.txt" -exec rm -rf {} \;find /oldboy -type f -name "oldboy*.txt" -delete查找指定数据信息进行复制find /oldboy -type f -name "oldboy*.txt" |xargs -i cp {} /oldgirl/find /oldboy -type f -name "oldboy*.txt" |xargs cp -t /oldgirl/find /oldboy -type f -name "oldboy*.txt" -exec cp -a {} /oldgirl \;查找指定数据信息进行移动find /oldboy -type f -name "oldboy*.txt" |xargs -i mv {} /oldgirl/find /oldboy -type f -name "oldboy*.txt" |xargs mv -t /oldgirl/find /oldboy -type f -name "oldboy*.txt" -exec mv {} /oldgirl \;查找指定数据信息按照日期查找7天以前的数据: find /oldboy -type f -mtime +7 查找最近7天的数据: find /oldboy -type f -mtime -7查找距今第7天数据: find /oldboy -type f -mtime 7主要用于批量删除历史数据信息产生输出的信息|grep xxxrpm -qa | grep vim 井号符号:#表示文件内容注释符号表示用户命令提示符号超级用户为 #普通用户为 $
2) 引号符号系列美元括号:$() == ``表示命令执行结果留下,用于其他命令调用引号符号:· 双引号 "" : 表示输入内容,就是输出内容,但是部分信息会被解析· 单引号 '' : 表示输入内容,就是输出内容(所见即所得)· 反引号 `` : 表示命令执行结果留下,用于其他命令调用· 没引号    : 表示和双引号功能类似, 但是可以识别序列信息 {}3) 定向符号系列小于符号:单个小于符号   <  标准输入重定向符号tr 'a-z' 'A-Z' < oldboy.txtxargs -n2 < oldboy01.txt 两个小于符号 <<  标准输入追加重定向符号cat >> oldboy.txt <<EOFoldboy01oldboy02oldboy03EOF大于符号:单个大于符号 1>/>   标准输出重定向符号2>     错误输出重定向符号两个大于符号 1>>/>> 标准输出追加重定向符号2>>    错误输出追加重定向符号4) 路径符号系列单点符号:find ./   表示当前目录双点符号:cd   ..   表示上级目录波浪符号:cd   ~    表示用户家目录信息超级用户:/root普通用户:/home/用户名称横线符号:cd   -    两个目录路间进行切换OLDPWD: 保存用户切换目录之前的所在路径信息5) 系统逻辑符号:&& : 前一件事执行成功了, 在执行&& 后面的命令 || : 前一件事执行失败了, 在执行|| 后面的命令; : 不管前面命令成功与否, 都会执行分号后面的命令
6)系统通配符号:*  匹配任意字符或者字符串信息# ll /oldboy/*.txt-rw-r--r-- 1 root root 24 Dec 17 10:58 /oldboy/oldboy01.txt-rw-r--r-- 1 root root 78 Dec 17 10:59 /oldboy/oldboy.txt
 {} 匹配生成序列信息数字序列: {01..10}  奇数序列 {01..10..2} 偶数序列 echo {00..10..2}字母序列: {a..z}    组合序列: #1对多# echo 1{a..c}1a 1b 1c#多对多# echo {1..3}{a..c}1a 1b 1c 2a 2b 2c 3a 3b 3c#多对1#echo {1..3}a1a 2a 3a# echo A{,B}  ---> 实现快速备份数据 cp /oldboy/oldboy.txt{,.bak}A AB# echo A{B,}  ---> 实现快速还原数据 cp /oldboy/oldboy.txt{.bak,}AB A
7)系统正则符号:特点(概念):正则符号主要用于匹配字符信息正则符号主要匹配文件内容信息正则符号主要匹配的是文件名称正则符号只有三剑客命令可以识别正则符号可以用于分析数据基础正则符号(grep  sed   awk):^  匹配以什么开头的信息       文件名称以什么信息开头$   匹配以什么结尾的信息       文件名称以什么信息结尾^$  匹配空行信息. 匹配任意一个字符*   匹配符号前面一个字符连续出现0次或者多次.*  匹配任意字符\ 转义(将意思进行转变)符号\t  ---制表符号    \n  ---换行符号      \r  ---换行符[] 匹配多个字符信息[^] 匹配多个字符信息并进行取反扩展正则符号(egrep/grep -E     sed -r    awk):+    匹配符号前面一个字符连续出现1次或者多次?    匹配符号前面一个字符连续出现0次或者1次{}  匹配符号前面一个字符连续出现指定次数{n,m} 匹配到的字符最少出现n次,最多出现m次{,m}  匹配到的字符最少0次,最多出现m次{n,}    匹配到的字符最少出现n次,最多0次{n}     匹配到的字符正好n次| 匹配多个字符串信息()   将多个字符信息汇总成一个整体后项引用前项信息
============================================================================补充: 如何查看一行后面是否有空格方法一: cat -A 文件信息方法二:vim 文件信息---> :set list
============================================================================

附赠补充正则符号和其他正则部分组合符号

[a-z0-9A-Z]      表示字符范围\+           一次或多次 \?            零次或一次 \|            表示或语法
8)实际操作
1>在某文件中找出以“m”开头的文件行   grep "^m"  文件例如:[root@znix ~]# grep "^m" oldboy.txtmy blog is http://oldboy.blog.51cto.commy qq num is 49000448.my god ,i am not oldbey,but OLDBOY!2>在某文件中找出以“m”结尾的文件行grep "m$"  文件例如:[root@znix ~]# grep "m$" oldboy.txtmy blog is http://oldboy.blog.51cto.com3>在某文件中找出以“a”开头并且以“b”结尾的文件行grep "^a.*b$"  文件[root@znix ~]# grep "^a.*b$" oldboy.txtankh   ohma zi-o  grond  zi-o  honeycomb
4>在某文件中找出以“oldb”开始并且以“d”结尾的单词所在行grep "oldb.y"  文件例如:[root@znix ~]# grep "oldb.y" oldboy.txtI am oldboy teacher!my blog is http://oldboy.blog.51cto.commy god ,i am not oldbey,but OLDBOY![root@znix ~]# grep -o "oldb.y" oldboy.txtoldboyoldboyoldbey
5>在某文件中匹配“o”的出现次数grep  ""[root@oldboy69 oldboy 08:49:54]# grep "g.d"  test01.txt god[root@oldboy69 oldboy 08:50:28]# grep "g..d"  test01.txt good[root@oldboy69 oldboy 08:50:49]# grep "g...d"  test01.txt goood[root@oldboy69 oldboy 08:50:53]# grep ".d"  test01.txt gdgodgoodgooodgooood[root@oldboy69 oldboy 08:51:18]# grep "o*"  test01.txtgdgodgoodgooodgooood
6>在文件中找出不以字母数字结尾的文件行[root@shiyi bonian02 20:47:53]# grep "[^0-9a-zA-Z]$"  bonian.txt   m oldboy teacher!I teach linux.I like badminton ball ,billiard ball and chinese chess!my qq num is 49000448.not 4900000448.my god ,i am not oldbey,but OLDBOY!

2. 三剑客命令grep

概述:命令用于查找文件里符合条件的字符串
语法格式:grep  [参数]  ‘条件 ’  文件
重要参数总结:-i   --- 忽略大小写搜索信息-n   --- 搜索信息后显示行号-c   --- 统计筛选出来的行数-v   --- 将搜索信息进行取反-o   --- 只输出显示匹配信息-w   --- 按照字符串进行匹配-A   --- 过滤指定内容之后的信息-B   --- 过滤指定内容之前的信息-C   --- 过滤指定内容上下几行的信息 -D  --- 设置对设备,FIFO,管道的操作,读取,跳过-F   --- 一个换行符分隔的字符串的集合fgrep-G   --- 基本正则-E   --- 识别扩展正则信息-e   --- 指定字符串做为查找文件内容-r   --- 递归搜索指定数据信息-d    --- 当指定要查找的是目录而非文件时,必须使用这项参数,否则grep指令将回报信息并停止动作-s   --- 不显示错误信息-q   --- 不显示任何信息-l   --- 列出文件内容符合指定的样式的文件名称-L   --- 列出文件内容不符合指定的样式的文件名称-y   --- 此参数的效果和指定"-i"参数相同-H   --- 在显示符合样式的那一行之前,显示该行所属的文件名称-h   --- 在显示符合样式的那一行之前,不显示该行所属的文件名称-P   --- 调用的perl正则-f   --- 从文件中获得匹配模式-x   --- 匹配整行-z   --- 一个0字节的数据行,但不是空行-m   --- 匹配的最大数-b   --- 打印匹配行前面打印该行所在的块号码。-a   --- 匹配二进制的东西-I   --- 不匹配二进制的东西-d   --- 目录操作,读取,递归,跳过-R   --- 递归调用-Z   --- 在FILE 文件最后打印空字符 -U   --- 使用标志高亮匹配字串;-u   --- 当CR 字符不存在,报告字节偏移(MSDOS 模式)
实战演练:
1、在当前目录中,查找后缀有 file 字样的文件中包含 test 字符串的文件,并打印出该字符串的行。此时,可以使用如下命令:grep test *file 结果如下所示:$ grep test test* #查找前缀有“test”的文件包含“test”字符串的文件  testfile1:This a Linux testfile! #列出testfile1 文件中包含test字符的行  testfile_2:This is a linux testfile! #列出testfile_2 文件中包含test字符的行  testfile_2:Linux test #列出testfile_2 文件中包含test字符的行 2、以递归的方式查找符合条件的文件。例如,查找指定目录/etc/acpi 及其子目录(如果存在子目录的话)下所有文件中包含字符串"update"的文件,并打印出该字符串所在行的内容,使用的命令为:grep -r update /etc/acpi 输出结果如下:$ grep -r update /etc/acpi #以递归的方式查找“etc/acpi”  #下包含“update”的文件  /etc/acpi/ac.d/85-anacron.sh:# (Things like the slocate updatedb cause    a lot of IO.)  Rather than  /etc/acpi/resume.d/85-anacron.sh:# (Things like the slocate updatedb cause a lot of  IO.) Rather than  /etc/acpi/events/thinkpad-cmos:action=/usr/sbin/thinkpad-keys--update 3、反向查找。前面各个例子是查找并打印出符合条件的行,通过"-v"参数可以打印出不符合条件行的内容。
查找文件名中包含 test 的文件中不包含test 的行,此时,使用的命令为:grep -v test *test*结果如下所示:$ grep-v test* #查找文件名中包含test 的文件中不包含test 的行  testfile1:helLinux!  testfile1:Linis a free Unix-type operating system.  testfile1:Lin  testfile_1:HELLO LINUX!  testfile_1:LINUX IS A FREE UNIX-TYPE OPTERATING SYSTEM.  testfile_1:THIS IS A LINUX TESTFILE!  testfile_2:HELLO LINUX!  testfile_2:Linux is a free unix-type opterating system4. 场景: 系统报警显示了时间,但是日志文件太大无法直接 cat 查看。(查询含有特定文本的文件,并拿到这些文本所在的行)grep -n '2019-10-24 00:01:11' *.log查看符合条件的日志条目。free-coderfree-coder5. Linux 里利用 grep 和 find 命令查找文件内容从文件内容查找匹配指定字符串的行:$ grep "被查找的字符串" 文件名例子:在当前目录里第一级文件夹中寻找包含指定字符串的 .in 文件grep "thermcontact" /.in从文件内容查找与正则表达式匹配的行:$ grep –e "正则表达式" 文件名查找时不区分大小写:$ grep –i "被查找的字符串" 文件名查找匹配的行数:$ grep -c "被查找的字符串" 文件名从文件内容查找不匹配指定字符串的行:$ grep –v "被查找的字符串" 文件名从根目录开始查找所有扩展名为 .log 的文本文件,并找出包含 "ERROR" 的行:$ find / -type f -name "*.log" | xargs grep "ERROR"例子:从当前目录开始查找所有扩展名为 .in 的文本文件,并找出包含 "thermcontact" 的行:find . -name "*.in" | xargs grep "thermcontact"在文件中搜索一个单词,命令会返回一个包含“match_pattern”的文本行:grep match_pattern file_namegrep "match_pattern" file_name在多个文件中查找:grep "match_pattern" file_1 file_2 file_3 ...输出除之外的所有行 -v 选项:grep -v "match_pattern" file_name标记匹配颜色 --color=auto 选项:grep "match_pattern" file_name --color=auto使用正则表达式 -E 选项:grep -E "[1-9]+"或egrep "[1-9]+"只输出文件中匹配到的部分 -o 选项:echo this is a test line. | grep -o -E "[a-z]+\."line.echo this is a test line. | egrep -o "[a-z]+\."line.统计文件或者文本中包含匹配字符串的行数 -c 选项:grep -c "text" file_name输出包含匹配字符串的行数 -n 选项:grep "text" -n file_name或cat file_name | grep "text" -n#多个文件grep "text" -n file_1 file_2打印样式匹配所位于的字符或字节偏移:echo gun is not unix | grep -b -o "not"7:not#一行中字符串的字符便宜是从该行的第一个字符开始计算,起始值为0。选项 -b -o 一般总是配合使用。搜索多个文件并查找匹配文本在哪些文件中:grep -l "text" file1 file2 file3...grep递归搜索文件在多级目录中对文本进行递归搜索:grep "text" . -r -n# .表示当前目录。忽略匹配样式中的字符大小写:echo "hello world" | grep -i "HELLO"hello选项 -e 制动多个匹配样式:echo this is a text line | grep -e "is" -e "line" -oisline#也可以使用-f选项来匹配多个样式,在样式文件中逐行写出需要匹配的字符。cat patfileaaabbbecho aaa bbb ccc ddd eee | grep -f patfile -o在grep搜索结果中包括或者排除指定文件:#只在目录中所有的.php和.html文件中递归搜索字符"main()"grep "main()" . -r --include *.{php,html}#在搜索结果中排除所有README文件grep "main()" . -r --exclude "README"#在搜索结果中排除filelist文件列表里的文件grep "main()" . -r --exclude-from filelist使用0值字节后缀的grep与xargs:#测试文件:echo "aaa" > file1echo "bbb" > file2echo "aaa" > file3grep "aaa" file* -lZ | xargs -0 rm#执行后会删除file1和file3,grep输出用-Z选项来指定以0值字节作为终结符文件名(\0),xargs -0 读取输入并用0值字节终结符分隔文件名,然后删除匹配文件,-Z通常和-l结合使用。grep静默输出:grep -q "test" filename#不会输出任何信息,如果命令运行成功返回0,失败则返回非0值。一般用于条件测试。打印出匹配文本之前或者之后的行:#显示匹配某个结果之后的3行,使用 -A 选项:seq 10 | grep "5" -A 35678#显示匹配某个结果之前的3行,使用 -B 选项:seq 10 | grep "5" -B 32345#显示匹配某个结果的前三行和后三行,使用 -C 选项:seq 10 | grep "5" -C 32345678#如果匹配结果有多个,会用“--”作为各匹配结果之间的分隔符:echo -e "a\nb\nc\na\nb\nc" | grep a -A 1ab--ab

3. 三剑客命令sed

sed作用:1)可以查找过滤筛选出指定的信息2)擅长编辑文件内容信息3)擅长对文件行进行操作
语法格式:sed [参数] '条件 指令' 文件信息参数:-n   --- 取消模式输出-i   --- 真正编辑文件内容-r   --- 识别扩展正则 -e   --- 识别多个条件操作-f   --- 直接将 sed 的动作写在一个文件内,-f filename 则可以运行filename 内的
sed动作指令 p    --- 输出操作d    --- 删除操作a    --- 附加操作i    --- 插入操作c    --- 取代操作:c 的后面可以接字串,这些字串可以取代 n1,n2 之间的行s    --- 替换操作g    --- 全局替换 w    --- 表示把行写入一个文件。  x    --- 表示互换模板块中的文本和缓冲区中的文本。  y    --- 表示把一个字符翻译为另外的字符(但是不用于正则表达式)\1   --- 子串匹配标记&    --- 已匹配字符串标记a\   --- 在当前行下面插入文本。i\   --- 在当前行上面插入文本。c\   --- 把选定的行改为新的文本。D   --- 删除模板块的第一行。h   --- 拷贝模板块的内容到内存中的缓冲区。H   --- 追加模板块的内容到内存中的缓冲区。G   --- 获得内存缓冲区的内容,并追加到当前模板块文本的后面。l   --- 列表不能打印字符的清单。N   --- 追加下一个输入行到模板块后面并在二者间嵌入一个新行,改变当前行号码。P   --- 打印模板块的第一行。q   --- 退出Sed。b   --- 分支到脚本中带有标记的地方,如果分支不存在则分支到脚本的末尾。t   --- if分支,从最后一行开始,条件一旦满足或者T,t命令,将导致分支到带有标号的命令处,或者到脚本的末尾。T   --- 错误分支,从最后一行开始,一旦发生错误或者T,t命令,将导致分支到带有标号的命令处,或者到脚本的末尾。w   --- 写并追加模板块到file末尾。  W   --- 写并追加模板块的第一行到file末尾。    使用方法:熟悉sed命令查询操作:(1)根据行号进行查询:单行查询:sed -n  '3p'    文件连续多行查询:sed -n '1,3p'    文件sed -n  '2,$p'    文件不连续多行查询:sed  -n  '1p;3p;5p'     文件(2)根据字符进行查询:单行查询:sed -n  '/字符信息/p'    文件连续多行查询:sed -n  '/字符信息1/,/字符信息2/p'    文件不连续多行查询:sed  -n '/字符信息1/p;/字符信息2/p;/字符信息3/p' 文件熟悉sed命令增添操作:a--在某一行或几行的下一行添加i--在某一行或几行的上一行添加$--在文件最后一行后添加信息(1)根据行号进行增添:单行增添:sed '1a信息' 文件连续多行增添:sed '1,3a信息' 文件 不连续多行增添:sed  -e '1a信息'  -e '3a信息' -e  '5a信息'  文件 (2)根据字符进行增添:单行增添:sed '/字符信息/a信息' 文件连续多行增添:sed '/字符信息/,/字符信息/a信息' 文件  不连续多行增添:sed  -e '/字符信息/a信息' -e '/字符信息/a信息' -e '/字符信息/a信息'  文件 熟悉sed命令删除操作: 不加参数就不会真正删除,真正删除加参数-i-i ---将模式空间内容覆盖到block中进行删除(1)根据行号进行删除:单行删除:sed '6d'   文件连续多行删除:sed '6,9d'   文件不连续多行删除:sed '6p;9p'    文件(2)根据字符进行删除:单行删除:sed   '/字符信息/d'    文件连续多行删除:sed   '/字符信息1/,/字符信息2/d'    文件不连续多行删除:sed '/字符信息1/d;/字符信息2/d;/字符信息3/d'  文件熟悉sed命令修改操作:    (1)根据行号进行修改:单行修改:sed '3s#文件内需要修改的内容#修改完后的内容#g'   文件连续多行修改:sed '2,4s#文件内需要修改的内容#修改完后的内容#g'  文件(2)根据字符进行修改:单行修改:sed '/字符信息/s#文件内需要修改的内容#修改完后的内容#g' 文件连续多行修改:sed '/字符信息/,/字符信息/s#文件内需要修改的内容#修改完后的内容#g' 文件
实战演练://test.txt 内容如下11 aa22 bb33 cc23 dd55 2e
删除行:按照行号删除:[root@shiyi bonian02 16:59:30]# sed '1d' test.txt22 bb33 cc23 dd55 2e[root@shiyi bonian02 16:59:30]# sed '2,5d' test.txt   删除带字符‘2’的行11 aa55 2e[root@shiyi bonian02 16:59:30]# sed '2d,4d' test.txt 删除以字符‘2’开头的行11 aa33 cc55 2e按照字符删除:[root@shiyi bonian02 16:59:30]# sed '/11 aa/d' test.txt22 bb33 cc23 dd55 2e[root@shiyi bonian02 16:59:30]# sed '/22 bb/,/55 2e/d' test.txt   删除带字符‘2’的行11 aa55 2e[root@shiyi bonian02 16:59:30]# sed '/22 bb/d,/23 dd/d' test.txt 删除以字符‘2’开头的行11 aa33 cc55 2e新增行:按照行号增加:a--在某一行或几行的下一行添加  i--在某一行或几行的上一行添加[root@shiyi bonian02 16:59:30]# sed '1a hello world' test.txt11 aahello world22 bb33 cc23 dd55 2e[root@shiyi bonian02 16:59:30]# sed '1i hello world' test.txthello world11 aa22 bb33 cc23 dd55 2e按照字符增加:[root@shiyi bonian02 16:59:30]# sed '/11 aa/a hello world' test.txt11 aahello world22 bb33 cc23 dd55 2e[root@shiyi bonian02 16:59:30]# sed '/11 aa/i hello world' test.txthello world11 aa22 bb33 cc23 dd55 2e替换行按照行号替换:[root@shiyi bonian02 16:59:30]# sed '1c hello world' test.txthello world22 bb33 cc23 dd55 2e[root@shiyi bonian02 16:59:30]# sed '2,4c hello world' test.txt11 aahello world33 cchello world55 2e按照字符替换:[root@shiyi bonian02 16:59:30]# sed '/11 aa/c hello world' test.txthello world22 bb33 cc23 dd55 2e[root@shiyi bonian02 16:59:30]# sed '/22 bb/c,/23 dd/c hello world' test.txt11 aahello world33 cchello world55 2e替换部分内容[root@shiyi bonian02 16:59:30]# sed 's#aa#AA#g' test.txt11 AA22 bb33 cc23 dd55 2es#需要替换的内容信息#替换后的内容信息#(g)当不加上"g"时只会将字符串开头的进行替换而加上"g"时会进行全局替换PPS:当然表示分隔的不止#,还有/,@等
==========================================================================
为了更好地体现 s#需要替换的内容信息#替换后的内容信息#(g) 的效果,将文件内容进行增添:
//test.txt11 aa22 bb33 cc23 dd55 2e66 aaff ccaazz ggaa
==========================================================================[root@shiyi bonian02 16:59:30]# sed 's#aa#AA#' test.txt11 AA22 bb33 cc23 dd55 2e66 AAff ccaazz ggAA[root@shiyi bonian02 16:59:30]# sed 's#aa#AA#g' test.txt11 AA22 bb33 cc23 dd55 2e66 AAff ccAAzz ggAA
替换指定行的内容:[root@shiyi bonian02 16:59:30]# sed '1s#aa#AA#g' test.txt11 AA22 bb33 cc23 dd55 2e66 aaff ccaazz ggaa[root@shiyi bonian02 16:59:30]# sed '5,$s#aa#AA#g' test.txt11 aa22 bb33 cc23 dd55 2e66 AAff ccAAzz ggAA[root@shiyi bonian02 16:59:30]# sed '/^[0-9]/s#aa#AA#g' test.txt11 AA22 bb33 cc23 dd55 2e66 AAff ccAAzz ggaa==========================================================================
为了更直观的表示查询效果,更改文件内容如下:
//test.txt11 aa22 bb33 cc23 dd
==========================================================================[root@shiyi bonian02 16:59:30]# sed '2p' test.txt11 aa22 bb22 bb33 cc23 dd可以看到第二行被输出来了,但是将文件的所有内容输出了一遍,且第2行则多输出了一次这是因为文件内容默认输出了,可以用-n取消默认输出[root@shiyi bonian02 16:59:30]# sed -n '2p' test.txt22 bb[root@shiyi bonian02 16:59:30]# sed -i '2d' test.txt 加上-i参数在运行命令之后,我们发现test.txt的第2行没有了,因为不论是删除,替换,添加都是在内容中进行,不会对磁盘内容有任何影响,加上-i参数后,会将内存的内容对磁盘内容进行覆盖从而真正改变文件内容

4. 三剑客命令awk

1) 三剑客awk命令概述介绍:awk - pattern scanning and processing language模式扫描(处理文件每一行信息) 过程语言(一门脚本语言 逻辑语句(循环/判断))作用说明:1) 擅长对文件列进行操作2) 擅长统计分析数据信息
2) 三剑客awk命令执行原理:
3) 三剑客awk命令语法结构:awk [参数] '模式{动作信息}'  文件信息awk [options] 'script' var=value file(s) awk [options] -f scriptfile var=value file(s)使用方法:参数:  -F 指定列分隔-v 在awk程序开始之前指定一个值valu给变量var,这些变量值用于awk程序的BEGIN快-f 后面跟一个保存了awk程序的文件,代替在命令行指定awk程序动作信息:print:参数可以是变量、数值或者字符串。字符串必须用双引号引用,参数用逗号分隔。如果没有逗号,参数就串联在一起而无法区分printf:其用法和c语言中printf基本相似,可以格式化字符串,输出复杂时,printf更加好用,代码更易懂gsub: awk替换信息方法:gsub(/替换的信息/,"要替换成什么",$n替换的第几列信息)模式信息:BEGIN  用于初始化FS变量(列分隔符),打印标题,或者初始化后需要在程序中调用的全局变量END 用于执行最后的运算或者打印最终的输出结果END块和BEGIN不是必须的内置变量:NR:   表示行号信息NF:    当前行中有多少列$NF: 当前行最后一列的内容(如果每一行有多列内容)FS:  表示分隔符字段信息;awk提供了多个比较操作符:"=="  ">" "<"  "<=" ">="  "!="   "~"匹配  "!~"不匹配

三剑客awk命令执行原理(图解):

4) 三剑客awk命令实操练习:
==========================================================================
准备环境:
Zhang  Dandan    41117397    :250:100:175
Zhang  Xiaoyu    390320151   :155:90:201
Meng   Feixue    80042789    :250:60:50
Wu     Waiwai    70271111    :250:80:75
Liu    Bingbing  41117483    :250:100:175
Wang   Xiaoai    3515064655  :50:95:135
Zi     Gege      1986787350  :250:168:200
Li     Youjiu    918391635   :175:75:300
Lao    Nanhai    918391635   :250:100:175
==========================================================================(1)awk '{print}'   文件信息     #逐行读取文件并输出到界面[root@shiyi bonian02 20:11:05]# awk '{print}' awk.txt Zhang  Dandan    41117397    :250:100:175Zhang  Xiaoyu    390320151   :155:90:201Meng   Feixue    80042789    :250:60:50Wu     Waiwai    70271111    :250:80:75       Liu    Bingbing  41117483    :250:100:175Wang   Xiaoai    3515064655  :50:95:135Zi     Gege      1986787350  :250:168:200Li     Youjiu    918391635   :175:75:300Lao    Nanhai    918391635   :250:100:175(2)awk '{print $n}'   文件信息    #逐列读取文件并输出第n列到界面(当n=0时,保留当前行所有内容)[root@shiyi bonian02 20:13:39]# awk '{print $1}' awk.txt ZhangZhangMengWuLiuWangZiLiLao[root@shiyi bonian02 20:22:16]# awk '{print $0}' awk.txt Zhang  Dandan    41117397    :250:100:175Zhang  Xiaoyu    390320151   :155:90:201Meng   Feixue    80042789    :250:60:50Wu     Waiwai    70271111    :250:80:75       Liu    Bingbing  41117483    :250:100:175Wang   Xiaoai    3515064655  :50:95:135Zi     Gege      1986787350  :250:168:200Li     Youjiu    918391635   :175:75:300Lao    Nanhai    918391635   :250:100:175(3)awk '{print "Xiaoyu"}' 文件信息  #逐行读取文件,每行结束后打印一次Xiaoyu,文件有多少行就打印多少个Xiaoyu[root@shiyi bonian02 20:19:59]# awk '{print "Xiaoyu"}' awk.txt XiaoyuXiaoyuXiaoyuXiaoyuXiaoyuXiaoyuXiaoyuXiaoyuXiaoyu(4)awk  -F ":" '{print $1}' 文件   #以":"为分隔符打印文件的第一例内容[root@shiyi bonian02 20:28:51]# awk  -F ":" '{print $1}' awk.txt Zhang  Dandan    41117397    Zhang  Xiaoyu    390320151   Meng   Feixue    80042789    Wu     Waiwai    70271111    Liu    Bingbing  41117483    Wang   Xiaoai    3515064655  Zi     Gege      1986787350  Li     Youjiu    918391635   Lao    Nanhai    918391635   (5)awk '/Xiaoyu/{print}'  文件  #打印文件中匹配Xiaoyu的那一行内容[root@shiyi bonian02 20:29:09]# awk '/Xiaoyu/{print}' awk.txtZhang  Xiaoyu    390320151   :155:90:201(6)awk -F ":"  '/Xiaoyu/{print $3}' 文件  #以":"为分隔符打印文件中匹配Xiaoyu的那一行中的第三列的内容[root@shiyi bonian02 20:38:33]# awk -F ":" '/Xiaoyu/{print $3}' awk.txt90(7)awk '$2~/Xiaoyu/{print $3}'  文件 #打印文件中,第二列匹配Xiaoyu的行其第三列的内容 ~表示匹配(以空格为分隔符)[root@shiyi bonian02 11:36:25]# awk '$2~/Xiaoyu/{print $3}' awk.txt390320151(8)awk -F ":" '$1~/Xiaoyu/{print $3}'  文件 #打印文件中,第一列匹配Xiaoyu的行其第三列的内容 ~表示匹配(以":"为分隔符)[root@shiyi bonian02 11:20:25]# awk -F ":" '$1~/Xiaoyu/{print $3}' awk.txt90(9)awk 'BEGIN {FS=":"} {if ($1~/Xiaoyu/) {print $2}}'  文件 # 以":"为分隔符,打印文件中第一列匹配Xiaoyu的行,其第二列的内容[root@shiyi bonian02 11:40:23]# awk 'BEGIN {FS=":"} {if ($1~/Xiaoyu/) {print $2}}' awk.txt155(10)awk 'BEGIN {FS=":"} ($1~/Xiaoyu/ || $2~/175/) {print $3}' 文件# 以":"为分隔符,打印文件中,第一列匹配Xiaoyu或者第二列匹配175的行,其第三列的内容[root@shiyi bonian02 13:57:13]# awk 'BEGIN {FS=":"} ($1~/Xiaoyu/ || $2~/175/) {print $3}' awk.txt9075(11)awk '/111/{print NF}'' 文件 # 统计匹配ock的行有多少列[root@shiyi bonian02 16:55:33]# awk '/111/{print NF}' awk.txt 454(12)awk 'NF == 5 {print}'  文件  #打印文件中有5列的行的内容,示例中,第四行有五列,所以打印的就是第四行的内容[root@shiyi bonian02 17:12:16]# cat awk.txtZhang  Dandan    41117397    :250:100:175Zhang  Xiaoyu    390320151   :155:90:201Meng   Feixue    80042789    :250:60:50Wu     Waiwai    70271111    :250:80:75       XiaoaiLiu    Bingbing  41117483    :250:100:175Wang   Xiaoai    3515064655  :50:95:135Zi     Gege      1986787350  :250:168:200Li     Youjiu    918391635   :175:75:300Lao    Nanhai    918391635   :250:100:175[root@shiyi bonian02 17:15:43]# awk 'NF==5 {print}' awk.txtWu     Waiwai    70271111    :250:80:75       Xiaoai(13)awk '{if (NR > 3) {print $NF} }' 文件   # 输出文件中行号大于3的行,其最后一列的内容[root@shiyi bonian02 17:15:51]# awk '{if (NR > 3) {print $NF} }' awk.txtXiaoai:250:100:175:50:95:135:250:168:200:175:75:300:250:100:175(14)awk '{if (NR > 8) {print NR".\t"$0} }' 文件  #格式化输入文件中行号大于3的行的行号和内容[root@shiyi bonian02 17:17:51]# awk '{if (NR > 8) {print NR".\t"$0} }' awk.txt9.  Lao    Nanhai    918391635   :250:100:175(15)awk 'BEGIN { x=0 } /^$/{x=x+1} END{print "find" " " x " " "blank lines"}'  文件  #统计文件中有多少空行[root@shiyi bonian02 17:25:05]# awk 'BEGIN {x=0} /^$/{x=x+1}END{print"find" ""x"" "blank lines"}' awk.txtfind0blank lines==========================================================================
awk脚本作用:打印文本中每一列的内容
#!/bin/bash
num=`wc 1.txt | awk '{print $2}'`   # 统计1.txt文件有多少列
for i in `seq 1 $num`            # 根据文件列数进行循环
doawk -v a=$i '{print $a}' 1.txt     # 打印每一列的内容,-v 参数可以指定一个变量保存外部变量的值,将外部变量传递给awk
done
==========================================================================5) 三剑客awk命令高级功能:普通运算:[root@shiyi bonian02 20:09:39]# awk 'BEGIN{print 2+4}'6[root@shiyi bonian02 20:10:21]# awk 'BEGIN{print 2-4}'-2[root@shiyi bonian02 17:01:01]# awk 'BEGIN{print 2*4}'   8[root@shiyi bonian02 20:10:07]# awk 'BEGIN{print 2^4}'16[root@shiyi bonian02 20:10:15]# awk 'BEGIN{print 2%4}'2[root@shiyi bonian02 20:10:15]# awk '{print ($2**2) +1}'  文件  #将文件中第二列内容做平方运算后再加1输入(字符串做平方运算后结果为0)统计分析数据信息:累加公式: i=i+1 ---(等同于)---> i++[root@shiyi bonian02 20:10:15]# cat test13.txt oldboy  oldgirloldboy   olddogoldboy   oldbaby在文件中逐行读取,并‘oldboy’信息出现的次数(显示过程)[root@shiyi bonian02 20:10:15]# awk '/oldboy/{i=i+1;print i} test13.txt    123在文件中逐行读取,只输出次数结果(不显示过程)[root@shiyi bonian02 20:10:15]# awk '/oldboy/{i=i+1}END{print i}' test13.txt    3求和运算/累加运算:求和公式: i=i+$n   $n 需要将第几列做求和运算[root@shiyi bonian02 20:10:15]#cat test14.txt 1    2      3       45678910[root@shiyi bonian02 20:10:15]# awk '{i=i+$1;print i}' test14.txt 13610152128364555[root@shiyi bonian02 20:10:15]# awk '{i=i+$1}END{print i}' test14.txt55

第四周总结(文件属性正则符号三剑客 )相关推荐

  1. 操作系统正则符号知识点总结

    课程知识概述部分 系统正则符号 基础正则 扩展正则 课程知识回顾说明 文件属性部分 inode block 概念理解 特点作用 诞生过程 查看过程 软链接 硬链接 概念理解 特点作用 诞生过程 查看过 ...

  2. 操作系统基础符号与正则符号

    文章目录 01.知识概述部分 02.知识回顾说明 03.系统基础符号系列 1)基础符号系列 美元符号:$ 叹号符号:! 竖线符号:| 井号符号:# 2)引号符号系列 引号符号: 3)定向符号系列 4) ...

  3. 1. 系统符号与正则符号

    系统符号与正则符号 系统符号 系统基础符号 基础正则符号 扩展正则符号 系统符号 系统基础符号 美元符号:$ · 用于取出变量中的内容· 表示用户命令提示符号普通用户为 $ (超级用户为 #)· 表示 ...

  4. 系统特殊符号、通配符号、正则符号、find、grep、sed、awk命令(总结)

    目录 一.常见系统特殊符号 (一)基础符号系列 1)美元符号  $ 2)叹号符号  ! 3)竖线符号  | 4)井号符号  # (二)引号符号系列 (三)定向符号系列 (四)路径符号系列 (五)逻辑符 ...

  5. 常用的正则符号(python)

    常用的正则符号(python) 1. 原字符 指代直接存在于字符串内部的子串. s1 = '通过几天Python的学习,感觉Python很简单,非常容易上手!' re.findall('Python' ...

  6. 第五章:正则表达式的使用-常用的正则符号(二)

    直接学习:https://edu.csdn.net/course/play/6861/335840 常用的正则符号(二): #6.英文状态下的问号? 表匹配前一个字符0次或1次 #超链接的匹配 url ...

  7. linux正则和三剑客(grep,sek,awk)

    三剑客 正则分类 基本正则 扩展正则 注:第四个为:| grep 注:对于linux来说,每一个文件行后面都会加一个$ sek 内置命令 匹配范围 案例 sed -i '/^#/d' file1 :删 ...

  8. 学习笔记(19):零基础搞定Python数据分析与挖掘-常用的正则符号(二)

    立即学习:https://edu.csdn.net/course/play/6861/335840?utm_source=blogtoedu 英文状态中中括号[] 指代字符集合,当需要特定的字符串匹配 ...

  9. python换行符使用_python正则符号,详细的换行符和制表符用法,超实用

    1.换行符:反斜杠加n字母,即\n. 这里的n,是newline的首字母.newline是换行的意思. PS只有在双引号" "或单引号' ' 括起来的字符串字面量内,这种写法才会被 ...

最新文章

  1. jsp中如何显示mysql数据库数据类型_jsp中如何以表格形式显示数据库中一个字段的数据?...
  2. Java设计模式(十七):责任链设计模式
  3. 我们应该使用什么指标来描述数据中心及其效率?
  4. PCM data flow - 6 - 声卡和PCM设备的建立过程
  5. 正则表达式(Regex)
  6. altium09怎么查元器件_在AD09中查找元件和封装
  7. android 实现页面跳转代码,Android 实现页面跳转
  8. Redis安装基本步骤
  9. itest(爱测试) 4.3.1 发布,开源BUG 跟踪管理 amp; 敏捷测试管理软件
  10. 蒟蒻的noip2015滚粗记
  11. 盾神与积木游戏 (贪心典例)
  12. Linux-CentOS上的服务搭建
  13. 交易猫源码+后台搭建教程
  14. html中form表单标签的使用
  15. Pandas基础入门知识点总结
  16. 【漫漫科研路\pgfplots】克服绘制色温图时,数据量大出现的内存限制
  17. iOS 非越狱下的代码注入
  18. 李开复给中国大学生的第六封信—选择的智慧
  19. sql server 函数大全
  20. 杰理之l播放文件加密后不播放提示音或者正常歌曲问题【篇】

热门文章

  1. 如何让type=checkbox不选中啊
  2. 【工具教程】Dreamweaver教程
  3. 图文详解网络基础知识
  4. 机械CAD标注技巧:如何在DWG图纸文件中添加序号?
  5. 史上最全金融产品架构分析二:证券公司
  6. 刚看的一个暴笑的笑话
  7. ansible定义全局变量
  8. 谷歌翻译不能用 2022.12
  9. SqlServer中的SmallDatetime作为条件查询的截至日期问题!
  10. 用正则表达式分析 URL