shell-2-三剑客?四剑客了解一下

一、grep、sed、awk称为:三剑客

三剑客听说是入门运维的小伙伴们是必备的技能,但广深小龙不是运维也大致学习了解一下。

但也有人说是四剑客,包括:find 当然我们也会一起了解下,如下图三剑客的价值犹如同sql的语法的重要性。

二、擅长过滤:grep

支持正则表达式,通常作为连接运行下一个命令。

格式:grep [-abcEFGhHilLnqrsvVwxy][-A<显示列数>][-B<显示列数>][-C<显示列数>][-d<进行动作>][-e<范本样式>][-f<范本文件>][--help][范本样式][文件或目录...]

参数:

  • -a 以文本方式搜索
  • -c 找到符合的行数的文件个数
  • -i 忽略大小写
  • -v 反向选择
  • -h 查询多文件时不显示文件名
  • -l 只输出包含匹配字符的文件名
  • -s 不显示错误信息
  • 等等

1、过滤配置文件的注释和空行:

[[email protected] ~]# grep -v "#" ~/hrun_django/httprunnermanger_web/HttpRunnerManager/settings.py|grep -v "^$"

2、使用正则匹配:

[[email protected] gsxl]# grep "[1-9]" t.txt
vm.swappiness = 6661111
[[email protected] gsxl]# 

我还是常用这种:杀掉进程:①ps -ef | grep mysql     ②ps -aux | grep python|xargs kill -9

[[email protected] gsxl]# ps -ef | grep mysql
root      2580 10112  0 12:53 pts/0    00:00:00 grep --color=auto mysql
polkitd  13411 13395  0 Apr04 ?        00:06:01 mysqld
root     23790 23603  0 Mar30 ?        00:00:00 /bin/sh /opt/zbox/run/mysql/mysqld_safe --defaults-file=/opt/zbox/etc/mysql/my.cnf
65534    24026 23790  0 Mar30 ?        00:00:01 /opt/zbox/run/mysql/mysqld --defaults-file=/opt/zbox/etc/mysql/my.cnf --basedir=/opt/zbox/run/mysql --datadir=/opt/zbox/data/mysql --plugin-dir=/opt/zbox/run/lib/mysql/plugin --user=nobody --log-error=/opt/zbox/logs/mysql_error.log --pid-file=/opt/zbox/tmp/mysql/mysqld.pid --socket=/opt/zbox/tmp/mysql/mysql.sock --port=3306
[[email protected] gsxl]# 

三、增删查改:sed

格式:sed [-hnV][-e<script>][-f<script文件>][文本文件]

参数

  • -e<script>或--expression=<script> 以选项中指定的script来处理输入的文本文件。
  • -f<script文件>或--file=<script文件> 以选项中指定的script文件来处理输入的文本文件。
  • -h或--help 显示帮助。
  • -n或--quiet或--silent 仅显示script处理后的结果。
  • -V或--version 显示版本信息。

动作

  • a :新增, a 的后面可以接字串,而这些字串会在新的一行出现(目前的下一行)~
  • c :取代, c 的后面可以接字串,这些字串可以取代 n1,n2 之间的行!
  • d :删除,因为是删除啊,所以 d 后面通常不接任何咚咚;
  • i :插入, i 的后面可以接字串,而这些字串会在新的一行出现(目前的上一行);
  • p :打印,亦即将某个选择的数据印出。通常 p 会与参数 sed -n 一起运行~
  • s :取代,可以直接进行取代的工作哩!通常这个 s 的动作可以搭配正规表示法!

1、替换文件内容:sed "s/替换内容/新内容/g" 文件名

[[email protected] gsxl]# cat t.txt
vm.swappiness = 6661111
asd
hello
# 加上 -i 参数既不打印显示
[[email protected] gsxl]# sed "s/asd/gsxl/g" t.txt
vm.swappiness = 6661111
gsxl
hello

2、替换指定行内容:sed -i "2c\gsxl" t.txt

[[email protected] gsxl]# cat t.txt
vm.swappiness = 6661111
asd
hello
[[email protected] gsxl]# sed -i "2c\gsxl" t.txt
[[email protected] gsxl]# cat t.txt
vm.swappiness = 6661111
gsxl
hello

四、统计计算:awk

格式:akw ‘条件{动作}‘

简单打印此文件的全部内容:awk ‘{print $0}‘ /etc/passwd

[[email protected] gsxl]# awk ‘{print $0}‘ /etc/passwd
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
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
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
polkitd:x:999:998:User for polkitd:/:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
chrony:x:998:996::/var/lib/chrony:/sbin/nologin
ntp:x:38:38::/etc/ntp:/sbin/nologin
tcpdump:x:72:72::/:/sbin/nologin
nscd:x:28:28:NSCD Daemon:/:/sbin/nologin

常用AWK内置变量,当然还有运算符、函数等更多请自行了解,小龙能力有限只是了解一下。

变量 描述
$n 当前记录的第n个字段,字段间由FS分隔
$0 完整的输入记录
ARGC 命令行参数的数目
ARGIND 命令行中当前文件的位置(从0开始算)
ARGV 包含命令行参数的数组
CONVFMT 数字转换格式(默认值为%.6g)ENVIRON环境变量关联数组
ERRNO 最后一个系统错误的描述
FIELDWIDTHS 字段宽度列表(用空格键分隔)
FILENAME 当前文件名
FNR 各文件分别计数的行号
FS 字段分隔符(默认是任何空格)
IGNORECASE 如果为真,则进行忽略大小写的匹配
NF 一条记录的字段的数目
NR 已经读出的记录数,就是行号,从1开始
OFMT 数字的输出格式(默认值是%.6g)
OFS 输出记录分隔符(输出换行符),输出时用指定的符号代替换行符
ORS 输出记录分隔符(默认值是一个换行符)
RLENGTH 由match函数所匹配的字符串的长度
RS 记录分隔符(默认是一个换行符)
RSTART 由match函数所匹配的字符串的第一个位置
SUBSEP 数组下标分隔符(默认值是/034)

五、查找文件:find

格式:find path -option [ -print ] [ -exec -ok command ] {} \;

成为四剑客的:find 所以我们也应了解一下。查找可以使用通配符。

1、-type参数,文件类型:①文件:f    ②目录:d

[[email protected] ~]# find ~/gsxl/ -name *.txt -type f
/root/gsxl/t.txt

2、-mtime参数,查找匹配文件创建的前或后时间

[[email protected] ~]# find ~/gsxl/ -name *.txt -mtime -1
/root/gsxl/t.txt
[[email protected] ~]# find ~/gsxl/ -name *.txt -mtime +30
[[email protected] ~]# 

3、-size参数,字母是大写,1M以上的文件: +1M

[[email protected] ~]# find / -name *.txt -size +1M
/usr/share/perl5/Unicode/Collate/allkeys.txt
/usr/share/hwdata/oui.txt
/usr/share/hwdata/iab.txt

4、-perm参数,查找文件权限为755

[[email protected] ~]# find / -name *.txt -perm 755
/usr/lib/firmware/ivtv-firmware-license-oemihvisv.txt
/usr/lib/firmware/ivtv-firmware-license-end-user.txt
[[email protected] ~]# 

如何批量改文件权限,当然目录也可以type参数改为:d,就可以通过用find来批量改:

[[email protected] gsxl]# find ~/gsxl/ -type f -exec chmod -R 644 {} \;
[[email protected] gsxl]# ll
total 8
drwxr-xr-x 2 root root 4096 Apr 11 22:55 test
-rw-r--r-- 1 root root   34 Apr 12 10:10 t.txt

当然以上四剑客还有很多用法,这只是其中一小小部分,更多使用请根据实际需求进行度娘一下,哈哈!

欢迎来大家QQ交流群一起学习:482713805 !!!

原文地址:https://www.cnblogs.com/gsxl/p/12684742.html

时间: 2024-08-30 14:48:45

shell-2-三剑客?四剑客了解一下的相关文章

SHELL编程四剑客练习--sed

SHELL编程四剑客: sed    awk     grep      find sed  可以将数据行进行替换.删除.新增.选取等特定工作 1.sed 如果不加任何参数,是不会去修改文件中的内容的.加 -i  参数会修改,如下图: 2.在文件行首加空格或其他字符,如下图: 行首   ^ 3.在行尾添加字符,如下图: 行尾   $ 4.在某行之后添加内容,如下图: 如果要在之前添加内容,把  a  改为  i   就OK了. 5.只显示其中某一行,如下图: 匹配关键字,"p"&quo

linux四剑客-grep/find/sed/awk/详解-技术流ken

1.四剑客简介 相信接触过linux的大家应该都学过或者听过四剑客,即sed,grep,find,awk,有人对其望而生畏,有人对其爱不释手.参数太多,变化形式太多,使用超级灵活,让一部分人难以适从继而望而生畏,浅尝辄止即罢.有人熟练掌握,使其四剑客为己所用,在分析日志,分析文本,统计,批量修改中游刃有余,大大提高了工作效率.本篇博文将详细讲解四剑客的参数选项,以及使用案例,相信认真读完本篇博文你也可以使得四剑客真正为己所用. 2.四剑客之grep 1.几个概念 正则表达式:Regular Ex

Linux Shell常用技巧(四) awk

Linux Shell常用技巧(四) awk 九.  awk实用功能: 和sed一样,awk也是逐行扫描文件的,从第一行到最后一行,寻找匹配特定模板的行,并在这些行上运行"选择"动作.如果一个模板没有指定动作,这些匹配的行就被显示在屏幕上.如果一个动作没有模板,所有被动作指定的行都被处理.       1.  awk的基本格式:    /> awk 'pattern' filename    /> awk '{action}' filename    /> awk '

shell编程(四)--- 条件判断之if判断

单分支if语句 if 判断条件;then     statement1     statement2 fi 双分支if语句 if 判断条件;then     statement1     statement2     -- else     statement3     statement4     -- fi 多分支if语句 if 判断条件1;then     statement1     statement2     -- elif 判断条件2;then     statement3    

Linux Shell常用技巧(四)

九.  awk实用功能: 和sed一样,awk也是逐行扫描文件的,从第一行到最后一行,寻找匹配特定模板的行,并在这些行上运行“选择”动作.如果一个模板没有指定动作,这些匹配的行就被显示在屏幕上.如果一个动作没有模板,所有被动作指定的行都被处理.       1.  awk的基本格式:    /> awk 'pattern' filename    /> awk '{action}' filename    /> awk 'pattern {action}' filename      

shell脚本(四)

shell脚本(四) (7)tr命令 #实现字符转换功能 #-c string:反选string字符集,即除了该字符串的所有字符集 #-d string:删除string中出现的所有字符 #-s:删除所有重复出现的字符序列,只保留一个 #删除所有数字 tr -d "[[:digit:]]" < name.txt tr -d 0-9 < name.txt #所有小写字母转换成大写字母 tr  "[a-z]" "[A-Z]" < n

shell脚本第四篇——常用小脚本

shell脚本第四篇--常用小脚本 1.将系统进程按内存占用大小排列显示出来 # ps -e  -o "%C   : %p : %z : %a"|sort -k5-nr 2.将系统进程按CPU占用大小排列显示 # ps -e  -o "%C   : %p : %z : %a"|sort   -nr 或# ps aux --sort -rss 3.查找当前目录下占用为0字节的文件并删除 # find ./ -type f -size 0 -exec rm -rf {}

linux 四剑客 find 、grep、sed、awk整理

linux 四剑客 find .grep.sed.awk整理 find 主要是用于查找Linux 操作系统的某个文件.目录所在路径,查找出满足条件的文件或者目录的路径 find / -name *.rpm -type d -- ###/:表示是在根目录下进行查找 ###-type:查找的类型,d是目录,f是普通文件 find / -name "con*.log" -exec cp {} /tmp/ \; ####基于 find 查找 Linux 系统以.log 结尾,同时名称以 con

Shell编程三剑客详解

在Linux/UNIX系统中包含很多文本处理器或文本编辑器,其中grep.sed和awk是shell编程中经常用到的文本处理工具,因此,被业内的人广泛的称之为"shell编程三剑客". grep命令工具 grep命令工具,在日常生活中,会经常用到,这里也就不多说了,如果有不明白的朋友,请参考博文:Shell脚本应用之正则表达式详解,里面详细介绍了grep命令的相关参数及使用, sed命令工具 sed是一个强大而简单的文本解析转换工具,可以读取文本,并根据指定的条件对文本内容进行编辑,最