linux脚本 文本处理,文本处理工具和shell脚本基本编程

文本处理工具

grep对文本进行搜索

获取我们想要的行(关键信息)

egrep支持扩展正则表达式的grep

fgrep快速搜索

不支持正则

-v取反找出不包含“pattern”的行

-i忽略字符的大小写

-n显示行号

-c显示统计到的行数,等同于wc -l

-o仅显示匹配到的字符串

-q静默输出只关心命令的执行结果 不关心输出结果

-A后几行

-B前几行

-C前后几行查看日志 搜索关键字排查错误的时候

-e指定多个条件,条件是或的关系

-w匹配整个单词

-E

=== egrep支持扩展的正则表达式

-F

=== fgrep不支持正则表达式

例子如下:

3c8ce6380daa33c267ccb0e2e66a02de.png

grep正则表达式

.单个字符

[abc] a | b | c

[^abc]除abc之外的字符

[:alnum:]数字和字符

[:alpha:]英文大小写字符a-z A-Z

[:lower:]小写字母

[:upper:]大写字母

[:space:]专门匹配空格

*匹配前面的字符任意次,0到无穷

.*任意字符出现任意次,比如说123 456 abc

a* a字符出现任意次aaaa aa

[[:lower:]]*任意小写字母出现任意次

\?匹配前面的字符出现0次或者1次

a\?出现0次或者1次

\+匹配前面的字符至少1次

a\+ a至少出现1次

\{n\}前面的字符出现n次

[0-9]\{3\} 000-999

\{m,n\}匹配前面的字符出现m到n次,m,n是一个范围

[0-9]\{1,3\} 0-999

\{,n\}匹配前面的字符最多出现n

[0-9]\{,3\}最大匹配是999

\{m,\}匹配前的字符至少出现m次

[0-9]\{3,\} 000无穷

位置锚定 用来定位字符出现的位置

^锚定行首

$锚定行尾

^$匹配空行的

^[[:space:]]行首是空白的字符

^[[:space:]]*$也是 空行

^a以a开头的行

b$以b结束的行

^a.*b$以a开头 中间任意字符 以b结尾的行

^a.*[[:space:]]\{3\}.*b$ a开头跟任意字符,中间出现三次空格再跟任意字符

以b结尾的行

^#以#开头的行

cat /etc/profile | grep -v “^#” | grep -v “^$”

cat /etc/httpd/conf/httpd.conf  |

grep -v “^#” | grep -v “^$”

\b  \b匹配词首和词尾

\<

\>匹配词首和词尾

\broot\b

\

vim编辑器

三种模式 打开之后默认是一般模式|命令模式

插入模式|编辑模式

末行模式|扩展模式(extend)|命令行模式

一般模式i编辑模式

i I a A o O用的比较多的是i o O

编辑模式esc一般模式

一般模式:末行模式

: ?/其中:/用的比较多的

末行模式q结束

:q退出

:q! 强制退出,不保存修改的内容

:wq保存退出

:x保存退出

一般模式下ZZ ZQ

上下左右键移动

10 –>

10

10向下

10向上

w单词间跳转

10w向下跳10个单词

H页首

M页中间

L页底

行首行尾

^跳至行首 非空白字符

$跳至行尾

0跳到行首

G最后一行

gg第一行1G

句子之间移动(上)下

段落之间移动{上}向下移动

Ctrl+d:向文件尾部翻半屏

Ctrl+u:向文件首部翻半屏

字符的删除

x删除字符

10x删除10个字符

替换模式

r替换当前字符

R进入替换模式,替换完之后按esc键退出

dd删除光标所在当前行

10dd删除10行

删除半行

d$删除光标处到行尾

d^ d0删除光标处到行首

dw de删除一个单词

x多按几次

d1G删除光标到第一行的数据

dG删除光标到最后一行的数据

二者结合可以删除整个文件里面的内容

删除文件全部内容 先跳到最后一行G

然后执行d1G

复制粘贴

yy  —> p

y$复制光标处到行尾的

y0 y^复制光标到行首的 注意空白字符和非空白字符的区别

ye yw复制单个字符

粘贴

p粘贴到当前行的下一行

P粘贴到当前行的上面一行

c相当于执行了x然后再执行i进入编辑操作

c$删除光标处到行尾的内容 然后进入编辑模式

c^ c0删除光标处到行首的内容,删完进入编辑模式

cb ce cw删除一个单词之后进入编辑模式

cc删除一行之后直接进入编辑模式

文件查找和压缩

find:根据我们指定的内容或者条件在系统上进行实时查找

最新 最快 最精确

使用场景 我想查找某个文件名叫server.xml在/apps/data/目录下

我想查找某个目录下文件大小超过10G的日志

find .

-name “baoding.log”

-print

查找路径查找条件找到之后执行的动作

find . -name “baoding.log”默认动作 标准输出,输出到当前屏幕上

查找条件

-name可以使用通配符 比如*?[] [^]

find . -name “????.log”

-iname文件名称忽略大小写

find

. -iname “baoding.log”

-inum n根据inode来查找 (基本不用)

find . -inum 1179826

-samefile name查找相同inode号的文件,其实等于查找硬链接(基本不用)

-links n根据链接数

find . -links 2

-regex使用正则表达式的方法匹配文件名

find /etc/ -regex “.*\.sh$”

根据属主和属组来查找

-user

-group -uid -gid

-nouser查找没有属主的文件或者目录

-nogroup查找没有属组的文件或者目录

测试方法:新建一个ash用户,然后把一个文件的属主和属组改成ash

然后再删除ash用户

根据文件类型:

-type f普通文件

d目录

l链接文件

s套接字文件

b块设备

c字符设备

p管道

根据文件大小来查找

-size +大于多少的文件

k M G

-size –小于多少的文件

k M G

-size等于多少的文件

k M G

根据时间来查找

-mtime +7 7天以前的从第8天开始

-mtime 7当前时间往前推第7天

-mtime -7当前时间往前推第7天以内

——10–9–8        7——5—3–2—1

mtime +7|mtime 7|mtime -7|

以分钟为单位-amin  -cmin(少用)

-mmin +7  -7  7

根据权限来查找(基本不用的)

-perm 755精确匹配有755权限的文件

-perm -222必须包含全部的222权限才可以

-perm +222(CentOS 6)

/222(CentOS 7)

只要有一个比如说属主 属组或者其他人有一个拥有写权限即可

几种压缩工具的用法

compress

compress file 会生产file.Z压缩文件,同时会删除源文件

compree -c file > file.Z 将压缩结果输出到标准屏幕上,可以一个(压缩)文件,从而达到生产压缩文件

同时保留源文件

compress -d

解压缩 .Z格式结尾的压缩文件

=== uncompress

zcat file.Z 直接查看压缩文件的内容不用先解压缩

gzip  压缩比1–9  默认是6  压缩比越高  耗费CPU资源也多

文件比较小的话,使用gzip越压缩越大

nginx gzip on

gzip_min_length 1k;     超过多大的文件(1K)才会压缩

-d 解压缩   == gunzip

-c 将压缩或者解压缩结果输出到屏幕

bzip2

-k 保留源文件

-d 解压缩  == bunzip2

-# 指定压缩比

bzcat file

xz 要取代gzip

bzip2的命令  压缩的更彻底

-k 保留源文件

-d 执行解压缩

-# 指定压缩比

xzcat 直接查看压缩文件内容

zip  打包压缩(可以压缩目录)

-r 递归压缩

unzip 解压缩

-p 将压缩结果输出屏幕上

tar 打包工具,将多个目录打包成一个文件

-c 打包 创建打包文件(归档)

-f 指定打包的文件名

-f filename 必须放在一起

-r 将文件追加至归档文件中

-t 不解压的情况下直接查看归档文件里面的内容

常用选项:-cf  -rf -tf

-x 执行解压缩

通常和-v(显示解压缩过程) -f结合使用

-C 解压到指定目录

shell脚本的编程

Shell脚本

过程式 解释语言

组成:

变量

命令

控制语句(if,for,while)

首行的固定写法:

#!/bin/bash

#!/bin/sh

告诉系统执行的时候要调用什么解释器。

如果首行不写,执行的时候需要使用命令bash

shell脚本的写法:

注释说明:

#!/bin/bash

#

#Filename:BeiFen.sh

#Description:Test

#Author:Li Nan

#Email:xxx@126.com

#Revision:3.1

#Date:20170407

#Note:Test

每一行之前最好有一个注释

脚本名称使用.sh结尾的

尽量避免使用中文

# 表示注释 此行不执行

脚本的执行:

1 bash

2 sh

3 加执行权限

1)相对路径

2)绝对路径

3)放到$PATH变量指定的目录里面,直接执行(tab)

脚本调试执行:

bash -n 检查语法错误,不检查拼写错误

bash -x 显示脚本执行的时候每一个命令具体的执行结果

bash变量的种类

本地变量(全局变量)  仅仅对当前shell生效

环境变量    对当前shell以及其他shell都生效 export

局部变量(私有变量)  通常用在函数里面,使用local

例子如下:

3c8ce6380daa33c267ccb0e2e66a02de.png

3c8ce6380daa33c267ccb0e2e66a02de.png

原创文章,作者:yaobinbin,如若转载,请注明出处:http://www.178linux.com/73027

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值