码迷,mamicode.com
首页 > 系统相关 > 详细

3. linux常用命令及三剑客 grep sed awk 用法

时间:2021-05-24 10:00:59      阅读:0      评论:0      收藏:0      [点我收藏+]

标签:流编辑器   grep   技术   tool   表达   ima   添加   lan   $2   

linux 常用命令:文件、网络、性能

一.常用命令

文件

ls
cd
pwd
mkdir
cp
rm
mv
  • 文件属性
# 授权
r: 读权限 4;
w: 写权限 2;
x: 操作权限 ;
r+w+x=7,是最高权限

chomd 777 文件名

技术图片

网络

ping # 测试网络连接情况
ping -c 5 www.baidu.com   # ping 5次百度
ping -l 2  www.baidu.com  # 每间隔2秒ping一次?
netstat # 打印linux网络系统的状态信息
 -t # 列出所有tcp
 -u # 列出所有udp
 -l # 只显示监听端口
 -n # 以数字形式显示地址和端口号
 -p # 显示进程的pid和名字
netstat -ntlp

性能

top  #持续监视系统性能
ps   #查看进程信息
ps -aux # 显示所有进程,包括用户,分组情况

top是实时监控,ps是快照,不能实时监控

二. linux三剑客与管道使用

管道、三剑客(grep,sed,awk)是linux命令,正则不是linux命令

正则

正则训练网址: https://tool.oschina.net/regex/

技术图片
技术图片

实战演练

  1. 找出所有的 hi 单词 \bhi\b
  2. 匹配固定电话号码 0\d{2}-\d{8}
  3. 匹配以字母a开头的单词 \ba\w*\b
  4. 匹配刚好6个字符的单词 \b\w{6}\b
  5. 匹配1个或更多连续的数字 \d+
  6. 5位到12位qq号 \d{5,12}

备注: 单词必须以 前后\b来包裹,并且是空格隔开的

三剑客

1. 管道

定义: 根据用户指定的模式(pattern)对目标文本进行过滤,显示被模式匹配到的行

语法: grep [OPTIONS] PATTERN [FILE]

意思:OPTIONS是参数 PATTERN可以理解为正则,FILE表示对那个文件或文本进行匹配

grep OPTIONS参数:
 -v #显示不被pattern匹配到的行
 -i #忽略字符大小写
 -n #显示匹配的行号
 -c #统计匹配的行数
 -o #仅显示匹配到的字符串
 -E #使用ERE,相当于egrep
  • grep 实战
    test.txt
hello world root
i am mamingchen
i am ROOT
swap abc
i am root
  1. 查找文件内容包含root的行数
grep -ni root test.txt
  1. 查找文件内容不包含root的行数
grep -nv root test.txt
  1. 查找以s开头的行
# 正则加不加引号都行
grep -n ‘^s‘ test.txt
grep -n ^s test.txt
  1. 查找以n结尾的行
# 正则加不加引号都行
grep -n ‘n$‘ test.txt
grep -n n$ test.txt

2.sed

定义:sed是流编辑器,一次处理一行内容
问题:grep其实也是一次处理一行,那sed与grep有什么区别呢?

sed是每次读取文件的一行 -> 临时存储在模式空间->然后sed命令处理->处理完成后送入屏幕->最后清空模式空间;

sed按照上面的流程每次读取一行处理一行,知道全部行都处理完

命令解析:

# 1. 常用参数
sed [-hn..][-e<script>][-f<script文件>][输入的文本文件]
 -h #显示帮助
 -n #仅显示script处理后的结果
 -e<script> # 以选项中指定的script来处理输入的文本文件,-e参数可以省略
 -f<script> # 以选项中指定的script文件来处理输入的文本文件
 -i<script> # 直接修改源文件

# 2. sed常见动作
1. a # 新增  
sed -e ‘4 a newline‘ test.txt # ‘4 a newline‘就是-e指定的脚本内容,意思是:在test.txt文件的第4行的`后面`新增一条文本,文本内容是newline

2. c # 取代  
sed -e ‘2,5c No 2-5 number‘ test.txt # ‘2,5c No 2-5 number‘就是-e指定的脚本内容,意思是:用c后面的内容 `No 2-5 number` 去取代test.txt的第2行到第5行的内容

3. d # 删除  
sed -e ‘2,5d‘ test.txt # 意思是要删除test.txt文件的第2到5行

4. i # 插入  
sed -e ‘2i newline‘ test.txt  #意思是在test.txt文件的第2行`前面`插入一条记录,记录的文本内容是newline

5. p # 打印  
sed -n ‘/root/p‘  # 意思是匹配到 两个斜杠/中间的内容root后,打印

6. s # 取代  
sed -e ‘s/old/new/g‘ test.txt # g是全局的意思。用后面的内容取代前面的内容,意思是在全局用 new去取代匹配到的old,

问题: sed 命令中的a 和 i什么区别?

a是在指定行的后面新增内容; i是在指定行的前面插入内容

# 查看帮助
man sed
sed -h

# 翻页:j向下,k向上
  • sed 实战
  1. 在test.txt文件的第4行加上 ‘i love taoche‘
# 注意,-e参数可以省略;这个添加是指输出到屏幕上,并没有真正的改变输入的文本文件test.txt
sed ‘4 a i love taoche‘ test.txt
  1. 在test.txt文件的第2行前添加‘i love taoche‘
sed ‘2 i i love taoche‘ test.txt
  1. 全局替换:用i love taoche替换test.txt文件中所有的root
# s后面不能有空格
sed ‘s/root/i love taoche/g‘ test.txt
  1. 直接修改文件内容:用i love taoche 直接修改源文件test.txt
sed -i ‘s/root/i love taoche/g‘ test.txt
  1. 直接修改源文件内容:在第4行后面新增 一个好汉三个帮
sed -i ‘4a 一个好汉三个帮‘ test.txt

3.awk

定义: 把文件按行逐行读入,以空格为默认分隔符将每行切片,切开的部分在进行后续处理

工作流程:
技术图片

命令形式:

# pattern表示正则表达式,
# action表示对匹配到的内容执行命令(默认为输出每行内容)
# FILENAME表示要处理的输入的文本
# 意思:对FILE进行awk切片,然后再根据脚本‘pattern + action‘处理并打印到屏幕上
awk ‘pattern + action‘ [FILENAME]

常用参数:

FILENAME # awk流量的文件名
BEGIN   # 处理文本之前要执行的操作
END   # 处理文本之后要执行的操作
FS  # 设置输入域分隔符,等价于命令行 -F 选项, 默认分隔符就是空格,可以通过这个参数指定其他分隔符
NF # 浏览记录的域的个数 (列数)
NR # 已读的记录数 (行数)
OFS # 输出域分隔符
ORS # 输出记录分隔符
RS # 控制记录分隔符
$0 # 整条记录
$1 # 表示当前行的第一个域 $2表示当前行的第二个域.....以此类推
  • awd 实战
  1. 搜索/etc/passwd有root关键字的所有行,并显示对应的shell
# -F : 意思是把/etc/passwd文件按照:分割
# ‘/root/ {print $7}‘: 意思是正则匹配root,打印第7列
# 其中//中间的内容表示正则表达式, {}里面的内容表示执行的动作 
awk -F : ‘/root/ {print $7}‘ /etc/passwd
  1. 打印/etc/passwd的第二行信息
# NR==2 就表示正在读第二行
# 读到第二行的时候,按照:分割,然后打印出整条内容
awk -F: ‘NR==2{print $0}‘ /etc/passwd
# 读到第二行的时候,不用分割,直接打印出整条内容
awk ‘NR==2 {print $0}‘ /etc/passwd
  1. 使用BEGIN加入标题,并输出第一列和第二列
# ‘BEGIN {print "第一列,第二列"} {print $1,$2}‘ 是一个脚本,意思是:在开始执行之前,先做第一个动作{print "第一列,第二列"},在屏幕上打印出第一列,第二列两个标题文字,然后再根据:分割后,执行第二个动作{print $1,$2},在屏幕上打印出分割后的第一列和第二列
awk -F : ‘BEGIN {print "第一列 第二列"} {print $1,$2}‘ /etc/passwd
  1. 默认的控制记录分隔符是回车, 自定义控制记录分隔符为 |
# echo "111|222|333 444|555 666":表示输出内容
# | awk : 表示把echo "111|222|333 444|555 666" 通过 管道符 给 awk 去处理
# awk ‘BEGIN {RS="|"} {print $0}‘: 表示awk拿到待处理文件后,首先指定控制记录分隔符RS为竖线,等awk处理完成后,打印出第一列内容
echo "111|222|333 444|555 666" | awk ‘BEGIN {RS="|"} {print $0}‘

3. linux常用命令及三剑客 grep sed awk 用法

标签:流编辑器   grep   技术   tool   表达   ima   添加   lan   $2   

原文地址:https://www.cnblogs.com/victorm/p/14141477.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!