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

Posted 广深-小龙 --扬帆起航!

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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、过滤配置文件的注释和空行:

[root@iZbp19lugf22zbsubsf1y6Z ~]# grep -v "#" ~/hrun_django/httprunnermanger_web/HttpRunnerManager/settings.py|grep -v "^$"

2、使用正则匹配:

[root@iZbp19lugf22zbsubsf1y6Z gsxl]# grep "[1-9]" t.txt 
vm.swappiness = 6661111
[root@iZbp19lugf22zbsubsf1y6Z gsxl]# 

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

[root@iZbp19lugf22zbsubsf1y6Z 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
[root@iZbp19lugf22zbsubsf1y6Z 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" 文件名

[root@iZbp19lugf22zbsubsf1y6Z gsxl]# cat t.txt 
vm.swappiness = 6661111
asd
hello
# 加上 -i 参数既不打印显示,且保存文件
[root@iZbp19lugf22zbsubsf1y6Z gsxl]# sed "s/asd/gsxl/g" t.txt 
vm.swappiness = 6661111
gsxl
hello

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

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

四、统计计算:awk

格式:akw \'条件{动作}\'

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

[root@iZbp19lugf22zbsubsf1y6Z 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

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

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

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

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

[root@iZbp19lugf22zbsubsf1y6Z ~]# 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

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

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

[root@iZbp19lugf22zbsubsf1y6Z gsxl]# find ~/gsxl/ -type f -exec chmod -R 644 {} \\;
[root@iZbp19lugf22zbsubsf1y6Z 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 !!!

以上是关于shell-2-三剑客?四剑客了解一下的主要内容,如果未能解决你的问题,请参考以下文章

文本三剑客之一 —— sed

shell 编程四剑客简介 find sed grep awk(微信公众号摘抄)

Flask 四剑客

三剑客-sed

Linux四剑客

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