第三周、文本处理工具、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]# ifconfig lo | head -2 | tail -1 | tr -s ‘ ‘ | cut -d‘ ‘ -f3
127.0.0.1
[[email protected] data]# ifconfig lo | head -2 | tail -1 | tr -s ‘ ‘ : | cut -d: -f3
127.0.0.1

4、paste合并文件

合并两个文件.-d指定分割符

下面为合并a.txt和1.txt,分隔符为:

[email protected]:~$ cat a.txt
a
b
c
d
[email protected]:~$ cat 1.txt
1
2
3
4
[email protected]:~$ paste 1.txt a.txt -d:
1:a
2:b
3:c
4:d

5、wc命令

统计行,单词,字节数

-m字符数 -L文件最宽的一行

[[email protected] ~]# wc /etc/passwd
 20  28 874 /etc/passwd
[[email protected] ~]# wc -l /etc/passwd
20 /etc/passwd
[[email protected] ~]# wc -c /etc/passwd
874 /etc/passwd
[[email protected] ~]# wc -w /etc/passwd
28 /etc/passwd
[[email protected] ~]# wc -lwc /etc/passwd
 20  28 874 /etc/passwd
[[email protected] ~]# wc -clw /etc/passwd
 20  28 874 /etc/passwd

6、wc显示当前目录下文件名最长的文件的长度

[[email protected] ~]# ls -1 /etc/ | wc -L
24

7、sort命令

默认是字母排序

-u删除输出中的重复行;

-t c使用c作为字段界定符(就是分割符,和cut的-d一样);

-k x 使用第x列作为基准进行排序

7.1 基于UID对passwd文件进行排序

[[email protected] ~]# cat /etc/passwd | sort -t: -k3 -nr
qqq:x:1000:1000:qqq:/home/qqq:/bin/bash
polkitd:x:999:998:User for polkitd:/:/sbin/nologin
systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
...

7.2 df磁盘利用率排序

[[email protected] data]# df -h | tr -s ‘ ‘ | cut -d‘ ‘ -f5 | tr -dc ‘[0-9]\n‘ | sort -n

0
0
0
0
5
32
32
67

8、uniq

从输出中删除前后相接的重复行

-d仅显示重复果的行

-u仅显示不曾重复的行

8.1【面试题】统计两个不同目录中相同的文件列表

[email protected]:~$ ls . /tmp -1 | sort | uniq -d
10.txt
1.txt
2.txt
3.txt
4.txt
5.txt
6.txt
7.txt
8.txt
9.txt
[email protected]:~$ (ls /tmp -1;ls . -1) | sort | uniq -d  #这样显示不显示目录
10.txt
1.txt
2.txt
3.txt
4.txt
5.txt
6.txt
7.txt
8.txt
9.txt

8.2【面试题】统计 两个不同目录中不同的文件列表

[email protected]:~$ (ls /tmp -1;ls . -1) | sort | uniq -u #这样显示不显示目录
{1..txt}
a.txt
gems
myblogs
systemd-private-b8854b73c0e2479db1d56e43d8995bec-systemd-resolved.service-AcZjbU
systemd-private-b8854b73c0e2479db1d56e43d8995bec-systemd-timesyncd.service-sngpw9
vmware-root_643-3979708515

9、lastb显示btmb文件内容

[[email protected] data]# lastb -f /var/log/btmp

10、【面试题】写一个脚本进行nginx日志统计,统计访问IP最多的前十

[[email protected] data]# awk ‘{print $1}‘ /var/log/nginx/access.log | sort -nr | uniq -c | sort -nr | head

11、diff比较两个文件的不同

-u显示 统一的diff格式文件

[email protected]:~$ diff 1.txt  2.txt -u
--- 1.txt   2019-08-04 10:07:47.384154832 +0000
+++ 2.txt   2019-08-04 10:08:01.620224554 +0000
@@ -1,3 +1,4 @@
 1
 2
 3
+4

13、patch

复制在其他文件中的改变了的文件(慎用)

-b选项来自动备份改变了的文件


正则表达式(标准和拓展)

一、基本语法

标准正则表达式中需要转义的字符有:(,),{,},|,+,.,

拓展正则表达式下词首,词尾,分组的引用这些的反斜杠不能省

  • *表示匹配任意次,包括0次
  • .*表示任意长度的任意字符
  • ?表示匹配前面字符0次或一次
  • +表示匹配前面字符一次或多次
  • {n,m}表示匹配前面字符n到m次
  • ^表示行首
  • $表示行尾
  • ^$表示空行^[[:space:]]*$表示空白行
  • \<词首 \>行尾
  • \<hello\> hello单词(单词的组成:字母数字下划线,其他字符均为分隔符)
  • (.*)括号为分组,\1 \2为使用前面括号的内容

2、显示磁盘分区使用率

[[email protected] data]# df -h | grep ‘^/dev/sd‘ | tr -s ‘ ‘ | cut -d‘ ‘ -f5 | cut -d% -f1 | sort -n
32
67

3、将root替换成rooter

:%[email protected]\(root\)@\[email protected]

4、正则表达式获取IP

[email protected]:~$ ifconfig ens33 | grep -Eo ‘([0-9]{,3}\.){3}([0-9]{,3})‘
192.168.38.148
255.255.255.0
192.168.38.255

5、找出ntestat -atn输出中LISTEN后跟任意空白字符的行

[email protected]:~$ netstat -atn | grep -E ‘LISTEN[[:space:]]*$‘
tcp        0      0 127.0.0.53:53           0.0.0.0:*               LISTEN
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN
tcp6       0      0 :::22                   :::*                    LISTEN 

6、查看每个IP建立的连接数

[email protected]:~$ cat ss.log  | grep ESTAB | tr -s ‘ ‘ : | cut -d: -f6 | sort  | uniq -c | sort -nr | head -3
     44 127.0.0.1
     10 113.234.28.244
      8 124.64.18.135

7、取CentOS7的版本号

[[email protected] data]# cat /etc/centos-release | grep -Eo ‘[0-9]+‘ | head -1
7

8、grep

-A # 后多少行
-B # 前多少行
- # 前后各多少行
-i 忽略大小写
-e 相当于逻辑中的or,可以多次使用
-w 匹配整个单词

9、misc目录

光盘会自动挂载到/misc/cd目录
autofs的作用,没有的话装一个并启动

10、nmap扫描局域网的机器

查看当前局域网哪些IP被使用了

[[email protected] ~]# nmap -v -sn 192.168.10.1/24 | grep -B1 "Host is up" | grep report | cut -d‘ ‘ -f5
192.168.10.1
192.168.10.6
192.168.10.12
192.168.10.14
192.168.10.16
192.168.10.19
192.168.10.20
192.168.10.28
...

11、基本正则表达式元字符

字符匹配

  • . 匹配任意单个字符
  • [] 匹配指定范围内的任意单个字符。[.?]表示匹配.或者\或者问号
  • [^] 匹配范围之外的任意单个字符
  • [:digit:]等等一系列

12、cat -A

可以查看某些看不到的东西:Tab、回车换行等

[[email protected] ~]# cat -A 1.txt
a b^Ic$
dd$
$
d$
$
$

13、程序执行方式

高级语言->编译器->机器代码->执行

14、.vimrc vim配置文件

[email protected]:~# vim ~/.vimrc
[email protected]:~# cat ~/.vimrc
set ignorecase
set cursorline
set autoindent
set ai
autocmd BufNewFile *.yaml exec ":call SetTitle()"

func SetTitle()
        if expand("%:e") == ‘yaml‘
        call setline(1,"#**************************************************************")
        call setline(2,"#Author:                     uscwifi")
        call setline(3,"#QQ:                         2*******1")
        call setline(4,"#Date:                       ".strftime("%Y-%m-%d"))
        call setline(5,"#FileName:                   ".expand("%"))
        call setline(6,"#URL:                        http://www.baidu.com")
        call setline(7,"#Description:                The test script")
        call setline(8,"#Copyright (C):              ".strftime("%Y")." Copyright ?  站点名称  版权所有")
        call setline(9,"#************************************************************")
        call setline(10,"")
        endif
endfunc
autocmd BufNewFile * normal G

15、将脚本的目录路径放入PATH路径,直接执行脚本

执行脚本的方式

  • 1、bash date.sh
  • 2、相对路径法 ./date.sh
  • 3、绝对路径法
  • 4、PATH变量法,scripts的目录加入PATH变量(写入bashrc或profile,然后source)
  • 5、cat date.sh|bash

16、脚本的两种错误

shell与python都属于解释型语法,边解释边执行;C语言,JAVA等是编译型语言,全部代码编译后才能执行

  • 1、语法错误,最好使用bash -n date.sh检查以减少语法错误,语法错误后的命令都不会执行,但前面的命令都会执行
  • 2、其他错误:比如命令不存在,命令错误等。不影响后续代码的执行。在脚本开始加上set -e可以让脚本出现错误时立即停止执行。
  • bash -n检查语法错误,写完脚本务必检查。
  • bash -x用于调试脚本,查看脚本的执行过程,执行逻辑。

17、shell计算求和等的几种方法:

17.1、let命令,比较常用

[[email protected] ~]# x=10
[[email protected] ~]# y=17
[[email protected] ~]# let z=$x+$y
[[email protected] ~]# echo $z
27

17.2、$(())比较常用

[[email protected] ~]# x=100
[[email protected] ~]# y=302
[[email protected] ~]# z=$(($x+$y))
[[email protected] ~]# echo $z
402

17.3、bc求和,较为常用

[[email protected] ~]# x=123
[[email protected] ~]# y=986
[[email protected] ~]# echo $x+$y | bc
1109

18、shell脚本的颜色

echo必须要-e参数才可以使用颜色

[[email protected] ~]# cat /data/docker_stats.sh
#!/bin/bash

RED="\e[31;1m"
GREEN="\e[32;1m"
YELLOW="\e[33;1m"
END_COLOR="\e[0m"
# 用法
echo -e "\n${YELLOW}################################${END_COLOR}\n"

19、cat /proc/partitions

20、单引号,双引号,反引号

  • 单引号:强引用,不识别命令,不识别变量
  • 双引号:不识别命令,但是别变量;
  • 反向单引号,都识别
[[email protected] ~]# echo ‘$HOSTNAME‘
$HOSTNAME
[[email protected] ~]# echo "$HOSTNAME"
glowing-bliss-1.localdomain
[[email protected] ~]# ls `pwd`
virt-sysprep-firstboot.log
[[email protected] ~]# echo `hostname`
-bash: echglowing-bliss-1.localdomain: command not found

21、程序有父进程和子进程

21.1、查看进程之间的父子关系

pstree

21.2、查看当前进程ID

echo $BASHPID

echo $$ echo $$经常在脚本中使用,查看脚本运行时的进程ID

21.3、查看父进程ID

echo $PPID

22、set

unset删除变量

set查看

set -C执行后无法覆盖已经存在的文件


shell脚本编程基础

[.?]表示. ? 中的某一个

grep -E "(bash|nologin)$" /etc/passwd grep -E "bash$|nologin$" /etc/passwd

1、环境变量的声明

  • export EDITOR=vim 定义默认编辑器,要写入profile
  • declare -x EDITOR=vim 与上面等价
  • declare -r声明为只读变量 等于 readonly name

2、set --

清空所有位置变量

3、变量引用要习惯加上花括号

  • ${10} ${DATE} ${PWD}

4、位置变量

原文地址:https://blog.51cto.com/14012942/2426543

时间: 2024-11-07 15:01:26

第三周、文本处理工具、shell脚本编程的相关文章

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

一.文本编辑工具VIM ●命令模式 --> 插入模式 i     insert, 在光标所在处输入 I     在当前光标所在行的行首输入 a    append, 在光标所在处后面输入 A    在当前光标所在行的行尾输入 o    在当前光标所在行的下方打开一个新行 O   在当前光标所在行的上方打开一个新行 ●插入模式 --- ESC-----> 命令模式 ●命令模式 ----:----> 扩展命令模式 ●扩展命令模式 ---ESC,enter---->命令模式 1.进入编辑

文本处理工具和正则表达式、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

8.17_Linux之bash shell脚本编程入门篇(三)之循环以及函数function的使用

bash shell脚本编程入门篇(三)之循环 什么是循环执行? 将某代码段重复运行多次 重复运行多少次: 循环次数事先已知 循环次数事先未知 有进入条件和退出条件 相关命令:for, while, until,selet, for命令的使用 作用: 依次将列表中的元素赋值给"变量名"; 每次赋值后即执行一次循环体; 直到列表中的元素耗尽,循环结束 命令格式: for 变量名 in 列表; do 循环体(正常执行的执行命令) 语句1 语句2 语句3 ... done 列表生成方式: (

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

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

&lt;&lt;linux命令行与shell脚本编程大全&gt;&gt;学习笔记(1)

一章初识linux shell 一.什么是linux 1.linux系统可大致划分为四部分: l Linux内核 l GNU工具组件 l 图形化桌面环境 l 应用软件 在linux系统里,这四部分中的每一部分都扮演着一个特别的角色,但如果将他们分开,每一部分都没太大的作用. 1)探究linux内核 Linux系统的核心是内核,内核控制着计算机系统上的所有硬件和软件,必要时分配硬件,有时需要执行软件. 内核基本负责以下四项主要功能: l 系统内存管理 l 软件程序管理 l 硬件设备管理 l 文件系

《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

Shell脚本编程的常识

Shell脚本编程的常识 (这些往往是经常用到,但是各种网络上的材料都语焉不详的东西,个人认为比较有用) 七种文件类型 d            目录                                                       l             符号链接 s             套接字文件                                           b            块设备文件 c            字符设备文件