文本处理工具和正则表达式、SHELL脚本编程

一、文本编辑工具VIM

●命令模式 --> 插入模式

i     insert, 在光标所在处输入

I     在当前光标所在行的行首输入

a    append, 在光标所在处后面输入

A    在当前光标所在行的行尾输入

o    在当前光标所在行的下方打开一个新行

O   在当前光标所在行的上方打开一个新行

●插入模式 --- ESC-----> 命令模式

●命令模式 ----:----> 扩展命令模式

●扩展命令模式 ---ESC,enter---->命令模式

1、进入编辑界面首先为命令模式,按o键切换为插入模式,且光标切换到当前行的下一行行首另起一行。

2、进入编辑界面首先为命令模式,按O键切换为插入模式,且光标切换到当前行的上一行行首另起一行。

3、进入编辑界面首先为命令模式,按A键切换为插入模式,且光标切换到当前行的行尾。

4、命令模式输入:r后加文件名称,可将文件内容读到当前文件中。

5、命令模式下输入:!加命令可不退出文本编辑界面执行命令,输入:r!加命令可将执行命令的输出读入到当前光标所在行。

6、命令模式下输入:set number 可显示行号。

7、命令模式下输入:2,4d,表示删除2-4行的内容,:2,4y复制2-4行的内容,在光标所在行按p键即可粘贴内容。(p贴在当前行的后一行,P贴在当行的后一行)

8、搜索替换内容,命令模式下输入,该命令为搜索1-5行的root,将1-5行的root全部替换为admin,/g表示全部替换,如果不加则默认更改第一个。%表示全文

9、vim工具高级个性化定制需要在家目录下创建vimrc文件

配置文件:

/etc/vimrc  (全局)

~/.vimrc  (个人)

(1)显示行号

显示:set number ,简写set nu

取消显示:set nonumber,简写set nonu

(2)忽略字符的大小写

启用:set ignorecase,简写set ic

不忽略:set noic

(3)自动缩进

启用:set autoindent,简写set ai

禁用:set noai

(4)复制保留格式

启用:set paste

禁用:set nopaste

(5)显示Tab和换行符

启用:set list

禁用:set nolist

(6)高亮搜索

启用:set hlsearch

禁用:set nohlsearch

(7)设置光标所在行的标识线

启用:set cursorline,简写set cul

禁用:set nocursorline

二、文本常见处理工具

1、cat  -A显示所有控制符

2、cat -n   对显示出的每一行进行编号

3、tail -f 跟踪文件名,监控文件变化

新终端触日志生成

 cut命令按列抽取文本

cut 命令从文件的每一行剪切字节、字符和字段并将这些字节、字符和字段写至标准输出。

如果不指定 File 参数,cut 命令将读取标准输入。必须指定 -b、-c 或 -f 标志之一。

  • -b :以字节为单位进行分割。这些字节位置将忽略多字节字符边界,除非也指定了 -n 标志。
  • -c :以字符为单位进行分割。
  • -d :自定义分隔符,默认为制表符。
  • -f :与-d一起使用,指定显示哪个区域。
  • -n :取消分割多字节字符。仅和 -b 标志一起使用。如果字符的最后一个字节落在由 -b 标志的 List 参数指示的
    范围之内,该字符将被写出;否则,该字符将被排除

1、取出etc/passwd文件中的第一列和第三列(cut -d按分隔符来分)

 1 [22:49:16 [email protected] ~]#cut -d: -f1,3 /etc/passwd
 2 root:0
 3 bin:1
 4 daemon:2
 5 adm:3
 6 lp:4
 7 sync:5
 8 shutdown:6
 9 halt:7
10 mail:8
11 operator:11
12 games:12
13 ftp:14
14 nobody:65534
15 dbus:81
16 systemd-coredump:999
17 systemd-resolve:193
18 tss:59
19 polkitd:998
20 unbound:997
21 sssd:996
22 sshd:74
23 gjz:1000
24 postfix:89

2、将df输出中的空格替换成%,再cut删除%号,取出第五列

 1 [22:49:44 [email protected] ~]#df | tr -s ‘ ‘ ‘%‘ |cut -d% -f5
 2 Use
 3 0
 4 0
 5 1
 6 0
 7 3
 8 1
 9 13
10 0

wc命令收集文本统计数据

利用wc指令我们可以计算文件的Byte数、字数、或是列数,若不指定文件名称、或是所给予的文件名为”-“,则wc指令会从标准输入设备读取数据。

  • -c或–bytes或–chars 只显示Bytes数。
  • -l或–lines 只显示列数。
  • -w或–words 只显示字数。
  • –help 在线帮助。
  • –version 显示版本信息。
1 [22:58:53 [email protected] ~]#wc nianling.txt
2  3  3 37 nianling.txt                     分别显示行数、单词数、字节数
1 [22:59:00 [email protected] ~]#wc -l nianling.txt
2 3 nianling.txt                            只显示文件行数

sort命令文本排序

Linux sort命令用于将文本文件内容加以排序。

sort可针对文本文件的内容,以行为单位来排序。

  • -b 忽略每行前面开始出的空格字符。
  • -c 检查文件是否已经按照顺序排序。
  • -d 排序时,处理英文字母、数字及空格字符外,忽略其他的字符。
  • -f 排序时,将小写字母视为大写字母。
  • -i 排序时,除了040至176之间的ASCII字符外,忽略其他的字符。
  • -m 将几个排序好的文件进行合并。
  • -M 将前面3个字母依照月份的缩写进行排序。
  • -n 依照数值的大小排序。
  • -o<输出文件> 将排序后的结果存入指定的文件。
  • -r 以相反的顺序来排序。
  • -t<分隔字符> 指定排序时所用的栏位分隔字符。
  • +<起始栏位>-<结束栏位> 以指定的栏位来排序,范围由起始栏位到结束栏位的前一栏位。
  • –help 显示帮助。
  • –version 显示版本信息。

1、将etc/passwd文件的第3列排序,:作为分隔符,默认按照字符排序,加上n按照数字排序

 1 [23:07:31 [email protected] ~]#sort -nt: -k3 /etc/passwd
 2 root:x:0:0:root:/root:/bin/bash
 3 bin:x:1:1:bin:/bin:/sbin/nologin
 4 daemon:x:2:2:daemon:/sbin:/sbin/nologin
 5 adm:x:3:4:adm:/var/adm:/sbin/nologin
 6 lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
 7 sync:x:5:0:sync:/sbin:/bin/sync
 8 shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
 9 halt:x:7:0:halt:/sbin:/sbin/halt
10 mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
11 operator:x:11:0:operator:/root:/sbin/nologin
12 games:x:12:100:games:/usr/games:/sbin/nologin
13 ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
14 tss:x:59:59:Account used by the trousers package to sandbox the tcsd daemon:/dev/null:/sbin/nologin
15 sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
16 dbus:x:81:81:System message bus:/:/sbin/nologin
17 postfix:x:89:89::/var/spool/postfix:/sbin/nologin
18 systemd-resolve:x:193:193:systemd Resolver:/:/sbin/nologin
19 sssd:x:996:993:User for sssd:/:/sbin/nologin
20 unbound:x:997:995:Unbound DNS resolver:/etc/unbound:/sbin/nologin
21 polkitd:x:998:996:User for polkitd:/:/sbin/nologin
22 systemd-coredump:x:999:997:systemd Core Dumper:/:/sbin/nologin
23 gjz:x:1000:1000:gjz:/home/gjz:/bin/bash
24 nobody:x:65534:65534:Kernel Overflow User:/:/sbin/nologin

2、找到分区利用率最大的值

[23:07:40 [email protected] ~]#df |tr -s ‘ ‘ ‘%‘|cut -d% -f5|sort -nr|head -1
13

3、统计访问次数最多的IP地址

以空格为分隔符列出第一列,sort排序,uniq  -c显示每行重复的次数,sort -nr倒序排序

1 [[email protected] ~]#cut -d ‘ ‘ -f1 /root/access_log |sort |uniq -c|sort -nr
2    4870 172.20.116.228
3    3429 172.20.116.208
4    2834 172.20.0.222
5    2613 172.20.112.14
6    2267 172.20.0.227

正则表达式

1、显示etc/passwd文件包含root的行

[[email protected] ~]#grep root /etc/passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin

2、以/dev/sd为字符列出磁盘分区并找出最大利用率值

1 [[email protected] ~]#df |grep /dev/sd |tr -s ‘ ‘ %|cut -d% -f5 |sort -nr |head -n1
2 18

3、取出etc/passwd文件中不包含/bin/bash的行

 1 [[email protected] ~]#grep -v ‘/bin/bash‘ /etc/passwd
 2 bin:x:1:1:bin:/bin:/sbin/nologin
 3 daemon:x:2:2:daemon:/sbin:/sbin/nologin
 4 adm:x:3:4:adm:/var/adm:/sbin/nologin
 5 lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
 6 sync:x:5:0:sync:/sbin:/bin/sync
 7 shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
 8 halt:x:7:0:halt:/sbin:/sbin/halt
 9 mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
10 operator:x:11:0:operator:/root:/sbin/nologin
11 games:x:12:100:games:/usr/games:/sbin/nologin
12 ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
13 nobody:x:99:99:Nobody:/:/sbin/nologin
14 systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
15 dbus:x:81:81:System message bus:/:/sbin/nologin
16 polkitd:x:999:998:User for polkitd:/:/sbin/nologin
17 libstoragemgmt:x:998:996:daemon account for libstoragemgmt:/var/run/lsm:/sbin/nologin
18 colord:x:997:995:User for colord:/var/lib/colord:/sbin/nologin
19 rpc:x:32:32:Rpcbind Daemon:/var/lib/rpcbind:/sbin/nologin
20 saslauth:x:996:76:Saslauthd user:/run/saslauthd:/sbin/nologin
21 abrt:x:173:173::/etc/abrt:/sbin/nologin
22 setroubleshoot:x:995:992::/var/lib/setroubleshoot:/sbin/nologin
23 rtkit:x:172:172:RealtimeKit:/proc:/sbin/nologin
24 gluster:x:994:991:GlusterFS daemons:/run/gluster:/sbin/nologin
25 chrony:x:993:990::/var/lib/chrony:/sbin/nologin
26 radvd:x:75:75:radvd user:/:/sbin/nologin
27 qemu:x:107:107:qemu user:/:/sbin/nologin
28 unbound:x:992:989:Unbound DNS resolver:/etc/unbound:/sbin/nologin
29 rpcuser:x:29:29:RPC Service User:/var/lib/nfs:/sbin/nologin
30 nfsnobody:x:65534:65534:Anonymous NFS User:/var/lib/nfs:/sbin/nologin
31 tss:x:59:59:Account used by the trousers package to sandbox the tcsd daemon:/dev/null:/sbin/nologin
32 usbmuxd:x:113:113:usbmuxd user:/:/sbin/nologin
33 geoclue:x:991:987:User for geoclue:/var/lib/geoclue:/sbin/nologin
34 pulse:x:171:171:PulseAudio System Daemon:/var/run/pulse:/sbin/nologin
35 saned:x:990:984:SANE scanner daemon user:/usr/share/sane:/sbin/nologin
36 gdm:x:42:42::/var/lib/gdm:/sbin/nologin
37 gnome-initial-setup:x:989:983::/run/gnome-initial-setup/:/sbin/nologin
38 sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
39 avahi:x:70:70:Avahi mDNS/DNS-SD Stack:/var/run/avahi-daemon:/sbin/nologin
40 postfix:x:89:89::/var/spool/postfix:/sbin/nologin
41 ntp:x:38:38::/etc/ntp:/sbin/nologin
42 tcpdump:x:72:72::/:/sbin/nologin

4、grep -ni 忽略大小写显示包含root的行,且显示行号

1 [23:10:27 [email protected] ~]#grep -ni ROOT /etc/passwd
2 1:root:x:0:0:root:/root:/bin/bash
3 10:operator:x:11:0:operator:/root:/sbin/nologin

5、grep  -c 统计匹配的行数

[23:26:39 [email protected] ~]#grep -c root /etc/passwd
2

6、^表示行首,表示etc/passwd文件中root开头的行

[23:30:29 [email protected] ~]#grep ^root /etc/passwd
root:x:0:0:root:/root:/bin/bash

二、SHELL脚本编程

1、系统信息脚本显示系统:主机名、ip地址、版本号、内核版本号、CPU型号、内存、硬盘大小

 1 #!/bin/bash
 2 #
 3 #********************************************************************
 4 #Author:        gaojinzhou
 5 #QQ:            525184587
 6 #Date:          2020-04-02
 7 #FileName:     system_info.sh
 8 #URL:           https://www.cnblogs.com/gaojinzhou/
 9 #Description:      The test script
10 #Copyright (C):     2020 All rights reserved
11 #********************************************************************
12 RED="\E[1;31m"
13 GREEN="echo -e \E[1;32m"
14 END="\E[0m"
15 $GREEN-----------------------------------Host systeminfo----------------------------------------$END
16 echo -e "HOSTNAME:                    $RED`hostname`$END"
17 echo -e "IPADDR:                      $RED`ifconfig ens160|grep -Eo ‘([0-9]{1,3}\.){3}[0-9]{1,3}‘ | head -n1`$END"
18 echo -e "OSVERSION:                   $RED`cat /etc/redhat-release`$END"
19 echo -e "KERNEL:                      $RED`uname -r`$END"
20 echo -e "CPU:                         $RED`lscpu|grep ‘Model name‘|tr -s ‘ ‘|cut -d : -f2`$END"
21 echo -e "MEMORY:                      $RED`free -h|grep Mem|tr -s ‘ ‘ : |cut -d : -f2`$END"
22 echo -e "DISK:                        $RED`lsblk | grep ‘^sd‘|tr -s ‘ ‘ |cut -d " " -f4`$END"
23 $GREEN------------------------------------------------------------------------------------------$END

输出结果如下:

 1 [23:46:20 [email protected] scripts]#. system_info.sh
 2 -----------------------------------Host systeminfo----------------------------------------
 3 HOSTNAME:                    Centos8
 4 IPADDR:                      10.0.0.7
 5 OSVERSION:                   CentOS Linux release 8.1.1911 (Core)
 6 KERNEL:                      4.18.0-147.el8.x86_64
 7 CPU:                          Intel(R) Core(TM) i5-6300HQ CPU @ 2.30GHz
 8 MEMORY:                      1.9Gi
 9 DISK:                        200G
10 ------------------------------------------------------------------------------------------

2、硬盘及磁盘节点编号自动告警脚本,将告警信息发送到邮箱,这里设置阈值为10

 1 #!/bin/bash
 2 #
 3 #********************************************************************
 4 #Author:        gaojinzhou
 5 #QQ:            525184587
 6 #Date:          2020-04-05
 7 #FileName:     disk_check.sh
 8 #URL:           https://www.cnblogs.com/gaojinzhou/
 9 #Description:      The test script
10 #Copyright (C):     2020 All rights reserved
11 #********************************************************************
12 WARNING=10
13 SPACE_USED=`df |grep ‘^/dev/sd‘|grep -oE ‘[0-9]+%‘|tr -d %| sort -nr|head -1`
14 INODE_USED=`df -i |grep ‘^/dev/sd‘|grep -oE ‘[0-9]+%‘|tr -d %| sort -nr|head -1`
15 [ "$SPACE_USED" -gt $WARNING -o "$INODE_USED" -gt $WARNING ] && echo "DISK USED:$SPACE_USED%,INODE_USED:$INODE_USED, will be full" | mail -s "DISK Warning" 525184587@qq.com    

3、安全删除脚本,rm命令定义为mv命令实现安全删除

 1 #!/bin/bash
 2 #
 3 #********************************************************************
 4 #Author:        gaojinzhou
 5 #QQ:            525184587
 6 #Date:          2020-04-02
 7 #FileName:     rm.sh
 8 #URL:           https://www.cnblogs.com/gaojinzhou/
 9 #Description:      The test script
10 #Copyright (C):     2020 All rights reserved
11 #********************************************************************
12 WARNING_COLOR="echo -e \E[1;31m"
13 END="\E[0m"
14 DIR=/tmp/`date +%F_%H-%M-%S`
15 mkdir $DIR
16 mv  $*  $DIR
17 ${WARNING_COLOR} Move $* to $DIR $END 

4、编写脚本 createuser.sh,实现如下功能:使用一个用户名做为参数,如果指定参数的用户存在,就显示其存在,否则添加之。并设置初始密码为123456,显示添加的用户的id号等信息,在第一次就提示用户立即改密码,如果没有参数,就提示用户“请输入用户名”

 1 #!/bin/bash
 2 #
 3 #********************************************************************
 4 #Author:        gaojinzhou
 5 #QQ:            525184587
 6 #Date:          2020-04-06
 7 #FileName:     createuser.sh
 8 #URL:           https://www.cnblogs.com/gaojinzhou/
 9 #Description:      The test script
10 #Copyright (C):     2020 All rights reserved
11 #********************************************************************
12 read -p "请输入用户名:" NAME
13 if getent passwd | grep $NAME; then
14     echo ‘该用户已存在‘
15 else
16     useradd $NAME &> /dev/null
17     echo 123456 | passwd --stdin $NAME &> /dev/null
18     passwd -e $NAME &> /dev/null
19     echo -e  "$NAME 用户已创建成功,用户密码为123456,请立即更改密码"
20 fi

5、编写脚本 yesorno.sh,提示用户输入yes或no,并判断用户输入的是yes还是no,或是其它信息

#!/bin/bash
#
#********************************************************************
#Author:        gaojinzhou
#QQ:            525184587
#Date:          2020-04-06
#FileName:     yesorno.sh
#URL:           https://www.cnblogs.com/gaojinzhou/
#Description:      The test script
#Copyright (C):     2020 All rights reserved
#********************************************************************
read -p "请输入yes或no:" INPUT
case $INPUT in
[Yy]|[Yy][Ee][Ss])
    echo "您输入的是yes"
;;
[Nn]|[Nn][Oo])
    echo "您输入的是no"
;;
*)
    echo "请输入yes或no"
esac               

原文地址:https://www.cnblogs.com/gaojinzhou/p/12639535.html

时间: 2024-11-08 23:49:14

文本处理工具和正则表达式、SHELL脚本编程的相关文章

文本处理工具和正则表达式、shell脚本编程基础-第四周

第四周-文本处理工具和正则表达式.shell脚本编程基础1. 统计出/etc/passwd文件中其默认shell为非/sbin/nologin的用户的个数,并将用户都显示出来grep -v '/sbin/nologin' /etc/passwd|wc -lgrep -v '/sbin/nologin' /etc/passwd|cut -d: -f12. 查出用户UID最大值的用户名,UID及shell类型.cut -d: -f1,3,7 /etc/passwd|sort -t: -k2 -nr

第三周、文本处理工具、shell脚本编程

文本处理工具 1.cut -d指定分隔符.比如-d: -d' ' -f指定取第几列.比如-f1,3 --output-delimiter指定显示的分隔符 tr -s压缩 -d删除 -c除了 2.使用tr和cut取磁盘的百分比 [[email protected] data]# df -h | tr -s ' ' | cut -d' ' -f5 | tr -dc '[0-9]\n' 0 0 5 0 32 67 32 0 3.取IP [[email protected] data]# ifconfi

#7 shell脚本编程之正则表达式

多命令执行方法: 脚本组成: 1.shengbang 2.# 3.空白行--没有任何内容的行.只包含空白字符或制表符(TAB) 4.逻辑判断 shell脚本编程: 1.加执行权限,通过路径来调用脚本: 2.利用解释器直接执行: 本文处理工具: vim.vi.nano 文本处理三剑客: grep系: grep.egrep.fgrep,文本搜索工具,基础"pattern"对于给定的文本进行模糊搜索,grep系默认工作于贪婪模式下: sed:stream editor,流数据器,行编辑器,文

shell脚本编程之正则表达式(二)(扩展正则表达式、sed)

shell脚本编程之正则表达式(二) 一.前言 ? 本文主要是对扩展正则表达式的介绍,同时,继续按照上篇文章的风格介绍sed文本处理工具,sed作为shell编程中"三剑客"之一,在对文本处理上有巨大作用.关于正则概念以及grep命令结合正则使用的案例请参照:https://blog.51cto.com/14557673/2455588 二.扩展正则表达式 ? 扩展正则表达式主要是为了简化指令而产出的.例如,使用基础正则表达式查询文件中空白行与行首为#号之外的行(一般用于查看生效的配置

shell脚本编程之冒泡排序脚本实现(解释非常详细,涉及正则表达式)

shell脚本编程之冒泡排序脚本实现 ? 冒泡排序作为编程中最为基础的算法,对于计算机编程初学者而言是非常值得多研究和多多尝试编写的.对于编程而言,优劣的不是语言,而是实现功能的逻辑思维和突如其来的灵感. ? 下面将给出使用shell实现冒泡排序的脚本,其中涉及的正则表达式需要细细理解.具体解释在下面的注释中有备注. #!/bin/bash #学习shell脚本过程中实现循环输入数生成数组,然后使用冒泡排序法进行从小到大排序 #Author:lokott #Version: 3.1 #冒泡排序法

Linux Shell脚本编程学习笔记和实战

http://www.1987.name/141.html shell基础 终端打印.算术运算.常用变量 Linux下搜索指定目录下特定字符串并高亮显示匹配关键词 从键盘或文件中获取标准输入 [read命令] 文件的描述符和重定向 数组.关联数组和别名使用 函数的定义.执行.传参和递归函数 条件测试操作与流程控制语句 获取时间日期格式和延时 [date.sleep命令] 内部字段分隔符IFS和脚本的调试DEBUG 显示.读取或拼接文件内容 [cat命令] 文件查找与打印文件列表 [find命令]

《Linux命令行与Shell脚本编程大全第2版.布卢姆》pdf

下载地址:网盘下载 内容简介  · · · · · · 本书是一本关于Linux 命令行与shell 脚本编程的全面教程.全书分为四部分:第一部分介绍Linuxshell 命令行:第二部分介绍shell 脚本编程基础:第三部分深入探讨shell 脚本编程的高级内容:第四部分介绍如何在现实环境中使用shell 脚本.本书不仅涵盖了详尽的动手教程和现实世界中的实用信息,还提供了与所学内容相关的参考信息和背景资料. 本书内容全面,语言简练,示例丰富,适合于linux 系统管理员及Linux 爱好者阅读

SHELL脚本编程的常识和VI常用技巧

来源:http://mprc.pku.edu.cn/mentors/training/TrainingCourses/material/ShellProgramming.HTM#_Toc37518085 Shell脚本编程的常识... 3 七种文件类型... 3 正则表达式... 3 字符类描述... 4 shell的引号类型... 4 变量设置时的不同模式:... 4 条件测试... 5 命令执行顺序... 6 脚本调试... 6 一些常用的小trick.. 6 打印一些头信息... 6 创建

《Linux命令行与shell脚本编程大全 第3版》

第一部分 Linux 命令行 第1章  初识Linux she1.1   什么是Linux 21.1.1 深入探究Linux 内核 31.1.2 GNU 工具 61.1.3 Linux 桌面环境 81.2   Linux 发行版 121.2.1 核心Linux 发行版 131.2.2 特定用途的Linux 发行版 131.2.3 Linux LiveCD 141.3   小结 15 第2章  走进shell2.1   进入命令行 162.1.1 控制台终端 172.1.2 图形化终端 172.2