常见命令详解

接下来我们介绍一些shell脚本中经常使用的linux命令:grep、sed、awk、find

grep命令详解

grep命令是我们常用的一个强大的文本搜索命令。
命令格式详解
grep [参数] [关键字] <文件名>

注意:
我们在查看某个文件的内容的时候,是需要有<文件名>
grep命令在结合|(管道符)使用的情况下,后面的<文件名>是没有的

参数 详解
-c 只输出匹配行的计数。
-n 显示匹配行及行号。
-v 显示不包含匹配文本的所有行。
- 不区分大小写。

模板文件

admin-1@ubuntu:~$ cat find.txt
nihao aaa
nihao AAA
NiHao bbb
nihao CCC
  • -c: 输出匹配到aaa的个数
admin-1@ubuntu:~$ grep -c aaa find.txt
1
  • -n: 输出匹配内容,同时显示行号
admin-1@ubuntu:~$ grep -n CCC find.txt
4:nihao CCC
  • -v: 匹配到的内容部输出,输出不匹配的内容
admin-1@ubuntu:~$ grep -v ni find.txt
NiHao bbb

sed命令详解

sed 行文件编辑工具。因为它编辑文件是以行为单位的。
命令格式详解

命令格式:
sed [参数] '<匹配条件> [动作]' [文件名]

参数 详解
参数为空 表示sed的操作效果,实际上不对文件进行编辑
-i 表示对文件进行编辑

注意:mac版本的bash中使用 -i参数,必须在后面单独加个东西: -i ''

匹配条件:
匹配条件分为两种:数字行号或者关键字匹配

关键字匹配格式:
‘/关键字/’

注意:
隔离符号 / 可以更换成 @、#、!等符号
根据情况使用,如果关键字和隔离符号有冲突,就更换成其他的符号即可(慎用)。

动作 详解
-a 在匹配到的内容下一行增加内容
-i 在匹配到的内容上一行增加内容
-d 删除匹配到的内容
-s 替换匹配到的内容

是动作不是参数!!!
是动作不是参数!!!
是动作不是参数!!!

注意:上面的动作应该在参数为-i的时候使用,不然的话不会有效果

  • 替换命令演示
    关于替换,我们从三个方面来学习:行号、列号、全体
    命令格式:sed -i [替换格式] [文件名]

注意:替换命令的写法
's###' ---> 's#原内容##' ---> 's#原内容#替换后内容#'

常见替换格式:

模板文件内容

admin-1@ubuntu:~$ cat sed.txt
nihao sed sed sed
nihao sed sed sed
nihao sed sed sed
  • 替换每行首个匹配内容:
    sed -i 's#原内容#替换后内容#' 文件名

示例:替换首每行的第1个sed为SED

admin-1@ubuntu:~$ sed -i 's#sed#SED#' sed.txt
admin-1@ubuntu:~$ cat sed.txt
nihao SED sed sed
nihao SED sed sed
nihao SED sed sed
  • 替换全部匹配内容:
    sed -i 's#原内容#替换后内容#g' 文件名

示例:替换全部sed为des

admin-1@ubuntu:~$ sed -i 's#sed#SED#g' sed.txt
admin-1@ubuntu:~$ cat sed.txt
nihao SED SED SED
nihao SED SED SED
nihao SED SED SED
  • 指定行号替换首个匹配内容:
    sed -i '行号s#原内容#替换后内容#' 文件名

示例:替换第2行的首个SED为sed

admin-1@ubuntu:~$ sed -i '2s#SED#sed#' sed.txt
admin-1@ubuntu:~$ cat sed.txt
nihao SED SED SED
nihao sed SED SED
nihao SED SED SED
  • 首行指定列号替换匹配内容:
    sed -i 's#原内容#替换后内容#列号' 文件名

示例:替换每行的第2个SED为sed

admin-1@ubuntu:~$ sed -i 's#SED#sed#2' sed.txt
admin-1@ubuntu:~$ cat sed.txt
nihao SED sed SED
nihao sed SED sed
nihao SED sed SED
  • 指定行号列号匹配内容:
    sed -i '行号s#原内容#替换后内容#列号' 文件名
    示例:替换第3行的第2个SED为sed
admin-1@ubuntu:~$ sed -i '3s#SED#sed#2' sed.txt
admin-1@ubuntu:~$ cat sed.txt
nihao SED sed SED
nihao sed SED sed
nihao SED sed sed

增加操作

作用:
在指定行号的下一行增加内容
格式:
sed -i '行号a\增加的内容' 文件名

注意:
如果增加多行,可以在行号位置写个范围值,彼此间使用逗号隔开,例如
sed -i '1,3a\增加内容' 文件名

演示效果:

  • 指定行号增加内容
admin-1@ubuntu:~$ sed -i '2a\zengjia-2' sed.txt
admin-1@ubuntu:~$ cat sed.txt
nihao SED sed SED
nihao sed SED sed
zengjia-2
nihao SED sed sed
  • 指定1~3每行都增加内容
admin-1@ubuntu:~$ sed -i '1,3a\tongshi-2' sed.txt
admin-1@ubuntu:~$ cat sed.txt
nihao SED sed SED
tongshi-2
nihao sed SED sed
tongshi-2
zengjia-2
tongshi-2
nihao SED sed sed

作用:
在指定行号的当行增加内容
格式:
sed -i '行号i\增加的内容' 文件名
注意:
如果增加多行,可以在行号位置写个范围值,彼此间使用逗号隔开,例如
sed -i '1,3a\增加内容' 文件名

演示效果:

  • 指定行号增加内容
admin-1@ubuntu:~$ sed -i '1i\insert-1' sed.txt
admin-1@ubuntu:~$ cat sed.txt
insert-1
nihao SED sed SED
tongshi-2
nihao sed SED sed
tongshi-2
zengjia-2
tongshi-2
nihao SED sed sed

删除操作

作用:
指定行号删除
格式:
sed -i '行号d' 文件名

注意:
如果删除多行,可以在行号位置多写几个行号,彼此间使用逗号隔开,例如
sed -i '1,3d' 文件名

删除演练

  • 删除第4行内容
admin-1@ubuntu:~$ sed -i '4d' sed.txt
admin-1@ubuntu:~$ cat sed.txt
insert-1
nihao SED sed SED
tongshi-2
tongshi-2
zengjia-2
tongshi-2
nihao SED sed sed
  • 删除多行(3-5行)内容
admin-1@ubuntu:~$ sed -i '3,5d' sed.txt
admin-1@ubuntu:~$ cat sed.txt
insert-1
nihao SED sed SED
tongshi-2
nihao SED sed sed

awk命令详解

awk是一个功能非常强大的文档编辑工具,它不仅能以行为单位还能以列为单位处理文件。
命令格式:
awk [参数] '[ 动作]' [文件名]

常见参数
-F 指定行的分隔符
常见动作
print 显示内容
$0 显示当前行所有内容
$n 显示当前行的第n列内容,如果存在多个$n,它们之间使用逗号(,)隔开
常见内置变量
FILENAME 当前输入文件的文件名,该变量是只读的
NR 指定显示行的行号
NF 输出 最后一列的内容
OFS 输出格式的列分隔符,缺省是空格
FS 输入文件的列分融符,缺省是连续的空格和Tab

命令演示
模板文件内容

admin-1@ubuntu:~$ cat awk.txt
nihao awk awk awk
nihao awk awk awk

打印指定列内容

  • 打印第1列的内容
admin-1@ubuntu:~$ awk '{print $1}' awk.txt
nihao
nihao

指定行打印内容

  • 打印第一行第1和第3列内容
admin-1@ubuntu:~$ awk  'NR==1 {print $1,$3}' awk.txt
nihao awk
  • 指定隔离分隔符,查看内容
admin-1@ubuntu:~$ cat linshi.txt
root:x:0:0:root:/root:/bin/bash
admin-1@ubuntu:~$ awk -F ':' '{print $1,$7}' linshi.txt
root /bin/bash
  • 设置显示分隔符,显示内容
admin-1@ubuntu:~$ awk 'BEGIN{OFS=":"} {print NR,$0}' awk.txt
1:nihao awk awk awk
2:nihao awk awk awk

find命令详解

命令格式:
find [路径] [参数] [关键字]

参数 详解
-name 按照文件名查找文件。
-perm 按照文件权限来查找文件。
-user 按照文件属主来查找文件。
-group 按照文件所属的组来查找文件。
-type 查找某一类型的文件,

诸如:
b - 块设备文件 d - 目录 c - 字符设备文件|
p - 管道文件 l - 符号链接文件 f - 普通文件。

-size n:[c] 查找文件长度为n块的文件,带有c时表示文件长度以字节计。

-depth:在查找文件时,首先查找当前目录中的文件,然后再在其子目录中查找。

-mindepth n:在查找文件时,查找当前目录中的第n层目录的文件,然后再在其子目录中查找。

! : 表示取反

命令演示

  • 在当前系统中查找一个叫awk的文件
admin-1@ubuntu:~$ sudo find /home/admin-1/ -name "awk.txt"
/home/admin-1/awk.txt
  • 在当前系统中查找文件类型为普通文件的文件
admin-1@ubuntu:~$ find /tmp -type f
/tmp/.X0-lock
/tmp/vgauthsvclog.txt.0
/tmp/unity_support_test.0
/tmp/config-err-4igbXW

shell编程之进阶篇三常见命令详解相关推荐

  1. shell编程之进阶篇二常见运算符号

    linux常见符号 接下来我们来介绍几个linux的场景符号: 重定向符号.管道符.其他符号 重定向符号 在shell脚本中有两种常见的重定向符号 > 和 >> > 符号 作用 ...

  2. Android日志[进阶篇]三-Logcat 命令行工具

    Android日志[进阶篇]一-使用 Logcat 写入和查看日志 Android日志[进阶篇]二-分析堆栈轨迹(调试和外部堆栈) Android日志[进阶篇]三-Logcat命令行工具 Androi ...

  3. 【Linux篇】sed命令详解

    文章目录 sed命令详解 一.基本语法 二.实操案例 内部命令选项说明 命令选项说明 标志 三.sed小技巧 sed命令详解 sed是一种流编辑器,它一次处理一行内容.处理时,把当前处理的行存储在临时 ...

  4. 【Linux篇】cut命令详解

    cut命令详解 cut的工作就是"剪",具体的说就是在文件中负责剪切数据用的.cut 命令从文件的每一行剪切字节.字符和字段并将这些字节.字符和字段输出. 一.基本语法 cut [ ...

  5. Linux常见命令详解

    Linux常见命令 1. 帮助功能 man/info/help 1.1 man 即 manunal,是一种显示Unix/Linux在线手册的命令.可以用来查看命令.函数或文件的帮助手册,另外它还可以显 ...

  6. docker 20安装教程及常见命令详解

    本文笔记学习来自B站狂神说 视频链接: https://www.bilibili.com/video/BV1og4y1q7M4?p=14 docker安装 先卸载系统之前的老版本docker sudo ...

  7. shell编程之进阶篇一表达式

    表达式 测试语句 Shell环境根据命令执行后的返回状态值 ($?)来判断是否执行成功,当返回值为0,表示成功, 值为其他时,表示失败. 使用专门的测试工具-test命令,可以对特定条件进行测试,并根 ...

  8. shell编程之进阶篇五函数

    函数基础知识 函数是什么? 函数就是将某些命令组合起来实现某一特殊功能的方式,是脚本编写中非常重要的一部分. 简单函数格式: 定义函数: 函数名(){函数体 } 调用函数: 函数名 传参函数格式: 传 ...

  9. shell编程之进阶篇四简单流程控制

    简单流程控制语句 单分支if语句 语法格式 if [ 条件 ] then指令 fi 场景: 单一条件,只有一个输出 单分支if语句示例 #!/bin/bash # 单if语句的使用场景 if [ &q ...

最新文章

  1. 能上qq打不开网页,金山毒霸帮你解决
  2. es6对象属性的遍历
  3. WEB前端:浏览器(IE+Chrome+Firefox)常见兼容问题处理【02】
  4. Java05-day05【方法(概述、调用过程图解)、带参方法、带返回值方法、重载、方法参数传递(基本类型、引用类型)】
  5. MySql 插入数据中文乱码
  6. Elasticsearch分布式机制探究
  7. python画动态图-Python使用matplotlib画动态图
  8. 技术支持好跳槽吗_计算机实施、IT技术支持、技术顾问、成功客户经理岗位怎么样?...
  9. nginx面试题及详解
  10. JFinal在使用oracle数据库时页面显示EL表达式获取不到值
  11. 解决nf_conntrack: table full, dropping packet
  12. PASCAL Visual Object Classes Challenge 2007 (VOC2007) 图像标注指南 / 标注规则
  13. 移植spca5xx-v4l1goodbye到立宇泰ARMSYS244O开发板
  14. 《Qt5+安装包制作(Qt Installer Framework)》
  15. git push失败unable to access ‘https://github.com/...‘的解决办法
  16. Scratch简单实现观察力的小游戏
  17. ABP 中“To”方法使用解析(类型转换公共方法)
  18. 预处理加速干货:大幅加速数据预处理、轻松定制高性能ML算子
  19. 关于v$process与v$session中process的理解(转载)
  20. 【制作企业画册】云展网教程 | 设置电子杂志画册开放给读者下载

热门文章

  1. virtualbox ,centos 的多网卡如何设置
  2. 重新想象 Windows 8.1 Store Apps (85) - 警报通知(闹钟), Tile 的新特性
  3. ISAKMP:(1006):deleting node 1202729771 error TRUE reason Delete Larval
  4. LZW数据压缩算法的原理分析
  5. Koa入门教程之示例应用
  6. Postgres-XL数据库集群在RedHat/Fedora/Oracle/CentOS平台上的搭建
  7. php pjax数据返回,如何将Pjax整合进网站,实现全站无刷新加载?
  8. 你还在用 Date?建议使用 LocalDateTime 了!
  9. java中的lambda表达式学习
  10. 斐讯N1刷Armbian_5.62,无法自动获取到ip怎么办?