Linux入门学习笔记二
grep
grep (缩写来自Globally search a Regular Expression and Print)是一种强大的文本搜索工具,它能使用特定模式匹配(包括正则表达式)搜索文本,并默认输出匹配行,grep和sed的区别在于,grep是以行为单位,进行字符串的对比,sed则可以进行删除、替换等更多的功能
语法:grep [-n] [-A] [-B] [--color==auto] '搜索的字符串' filename
-c(count) :打印符合要求的行数
-i (ignore-case):忽略大小写
-n (line-number):在输出符合要求的行的同时连同行号一起输出
-v (invert-natch):打印不符合要求的行,反向选择
-A (after-context):后跟一个数字(有无空格都可以),例如 –A2则表示打印符合要求的行以及下面两行
-B (before-context):后跟一个数字,例如 –B2 则表示打印符合要求的行以及上面两行
-C (context):后跟一个数字,例如 –C2 则表示打印符合要求的行以及上下各两行
-E 与egrep执行模式相同,才能使用扩展的正则表达式
案例
root@kali:~# cat test.txt
123abc456
abc123
#adff
23####n#####adddff
- 查看非空行和非注释开头的行并输出行
root@kali:~# grep -Evn '^$|^#' test.txt2:1233:abc4:4566:abc12310:23####11:n##
- 过滤出带有某个关键词的行并输入行号
root@kali:~# grep -vn 'df' test.txt 1:2:1233:abc4:4565:6:abc1237:9:10:23####11:n##12:##
- 指定要过滤字符出现的次数
root@kali:~# grep -En 'f{2}' test.txt 8:#adff13:#adddff
- 清理进入的日志
grep /home/member/logs/access.log -v 174.122.136.104 -output cleaned.log
sed
sed全称是:Stream EDitor
(流编辑器),本身是一个管道命令,并不对真实文件内容修改。SED是一项Linux指令,功能同awk类似,差别在于,sed简单,对列处理的功能要差一些,awk的功能复杂,对列处理的功能比较强大。grep工具的功能其实还不够强大,grep实现的只是查找功能,而它却不能实现把查找的内容替换掉。以前用vim的时候,可以查找也可以替换,但是只局限于在文本内部来操作,而不能输出到屏幕上。sed工具以及下面要讲的awk工具就能实现把替换的文本输出到屏幕上
的功能了,而且还有其他更丰富的功能。sed和awk都是流式编辑器,是针对文档的行来操作的
语法:sed 参数 文件
-e command,–expression=command 直接在指令列模式上进行 sed 的动作编辑;。
-h,–help打印帮助,并显示bug列表的地址。
-n,–quiet,–silent取消默认输出,使用安静(silent)模式。在一般 sed 的用法中,所有来自 STDIN的资料一般都会被列出到萤幕上。但如果加上 -n 参数后,则只有经过sed 特殊处理的那一行(或者动作)才会被列出来
-f,–file=script-file <script文件> 以选项中指定的script文件来处理输入的文本文件。
-V,–version打印版本和版权信息
-i 直接修改读取的档案内容,而不是由萤幕输出
动作说明:
a :新增, a 的后面可以接字串,而这些字串会在新的一行出现(目前的下一行)~ c :取代, c 的后面可以接字串,这些字串可以取代 n1,n2 之间的行! d :删除,因为是删除啊,所以 d 后面通常不接任何咚咚; i :插入, i 的后面可以接字串,而这些字串会在新的一行出现(目前的上一行); p :打印,亦即将某个选择的数据印出。通常 p 会与参数 sed -n 一起运行~ s :取代,可以直接进行取代的工作哩!通常这个 s 的动作可以搭配正规表示法!例如 1,20s/old/new/g 就是啦! 注意:‘s’ 就是替换的命令, ‘g’ 为本行中全局替换,如果不加 ‘g’ 只换该行中出现的第一个。除了可以使用 ‘/’ 作为分隔符外,还可以使用其他特殊字符例如 ‘#’ 或者 ‘@’ 都没有问题
案例
- 显示
sed -n '1,2p' test.txt ##显示一二两行,逗号间隔^表示开通$表示结尾
- 新增(目前的下一行)
sed '1,2a sdg' test.txt ## 在一二两行后添加一行sgd
- 删除
sed -n '1,2d' test.txt ##显示一二两行,逗号间隔^表示开通$表示结尾
- 取代
sed -n '1,20s/old/new/g' test.txtsed '1,2c hi' test.txt ## 将第一二两行替换为hi
- 插入(目前的上一行)
sed -i '$a bye' test.txt ##在文件ab中最后一行直接输入"bye"
- 查询
sed -n '/关键字/p' test.txt
- 删除匹配行
sed -i '/匹配字符串/d' filename (注:若匹配字符串是变量,则需要“”,而不是‘’。记得好像是)
- 替换匹配行中的某个字符串
sed -i '/匹配字符串/s/替换源字符串/替换目标字符串/g' filename
awk
AWK是一种处理文本文件的语言,是一个强大的文本分析工具。之所以叫AWK是因为其取了三位创始人 Alfred Aho,Peter Weinberger, 和 Brian Kernighan 的Family Name的首字符
语法:awk [选项参数] 'script' var=value file(s) 或awk [选项参数] -f scriptfile var=value file(s)
案例
- 截取文档中的某个段
awk -F ':' '{print$2}' test.txt
解释一下:
- -F 选项的作用是指定分隔符,如果不加-F指定,则以空格或者tab为分隔符。Print为打印的动作,用来打印出某个字段。为第一个字段,2为第二个字段,依次类推,有一个特殊的那就是$0,它表示整行。
- 注意awk的格式,-F后紧跟单引号,然后里面为分隔符,print的动作要用 { } 括起来,否则会报错。print还可以打印自定义的内容,但是自定义的内容要用双引号括起来
- 匹配
# 以冒号分隔,让第一个字符段中匹配有123awk -F ':' '$1 ~/123/' test.txt
# 多次匹配awk -F ':' '/root/ {print $1,$3} /test/ {print $1,$3}' /etc/passwd
- 条件操作符
awk -F ':' '$3=="0"' /etc/passwd
awk中是可以用逻辑符号判断的,比如 ‘==’ 就是等于,也可以理解为 ‘精确匹配’ 另外也有 >, ‘>=, ‘<, ‘<=, ‘!= 等等,值得注意的是,即使$3为数字,awk也不会把它当数字看待,它会认为是一个字符。所以不要妄图去拿$3当数字去和数字做比较。
!= 为不匹配另外还可以使用 && 和 || 表示 “并且” 和 “或者” 的意思。
- 内置变量
awk常用的变量有:NF :用分隔符分隔后一共有多少段NR :行数
[root@localhost ~]# head -n3 /etc/passwd root:x:0:0:usr:/root:/bin/bash bin:x:1:1:bin:/bin:/sbin/nologin daemon:x:2:2:daemon:/sbin:/sbin/nologin [root@localhost ~]# head -n3 /etc/passwd | awk -F ':' '{print NF}' 7 7 7 [root@localhost ~]# head -n3 /etc/passwd | awk -F ':' '{print $NF}' /bin/bash /sbin/nologin /sbin/nologin [root@localhost ~]# head -n3 /etc/passwd | awk -F ':' '{print NR}' 1 2 3
- 使用判断条件
[root@localhost ~]# awk 'NR>40' /etc/passwd gnome-initial-setup:x:989:983::/run/gnome-initial-setup/:/sbin/nologintcpdump:x:72:72::/:/sbin/nologin avahi:x:70:70:Avahi mDNS/DNS-SD Stack:/var/run/avahi-daemon:/sbin/nologin cao:x:1001:1001::/home/cao:/bin/bashusr:x:1002:1002:用户,offic,1234567,123:/home/usr:/bin/bashtest:x:1003:1003::/home/test:/bin/bash test1:x:1004:1003::/home/test1:/bin/bash
- 免插件仅代码实现WordPress评论回复邮件
- ASP.NET Core 1.1 简介
- 使用 Roslyn 编译器服务
- ExtJS4预览:渲染过程重构和标准化
- Ext JS 4预览:更快、更简单、更稳定
- VR技术的进步推动工业机器人革命
- tLinux 2.2下安装Mono 4.8
- WordPress评论回复邮件样式美化教程
- 基于Aspose.Pdf把pdf文件每一页转换为图片
- 分布式文件存储的数据库开源项目MongoDB
- 使用 JavaScriptService 在.NET Core 里实现DES加密算法
- 拒绝全英文垃圾评论!仅用代码实现
- 在.NET Core 里使用 BouncyCastle 的DES加密算法
- 微信小程序:为了满足三方需求,我们一直在改变
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Linux被中断的系统如何调用详解
- centos 修改ssh默认端口号的方法示例
- Linux中特殊权限SUID、SGID与SBIT的深入讲解
- linux新文件权限设置之umask的深入理解
- 在 CentOS 8/RHEL 8 上安装和使用 Cockpit的方法
- Linux删除文件提示Operation not permitted的处理办法
- 微任务与宏任务
- Linux 文件权限的详细介绍
- Linux统计一个文件中特定字符个数的方法
- CentOS7 安装 zabbix 4.0 教程(图文详解)
- 浅谈简单使用CentOS7防火墙及开放端口
- Linux后台运行Python程序的几种方法讲解
- tr命令在统计英文单词出现频率中的妙用
- 浅析CentOS8虚拟机访问Windows10主机文件夹方法
- CentOS 7 安装 Jenkins过程详解