在Linux运维日常工作中,Shell脚本的使用如家常便饭一样,须做到顺手拈来,文本处理所占比重更是不容小视,而文本处理中,稍具难度的莫过于文本的过滤。今天我们要通过这一讲,掌握文本过滤的常用命令,有哪些呢?具体如下:

1)head

作用:提取文本文件的前几行

格式:head  -数字  文本文件

实例:

--查看/etc/passwd/文件的前3行

#head  -3  /etc/passwd

2)tail

作用:提取文本文件的末尾几行

格式:tail +数字/-数字/-f   文本文件

实例:

--查看/etc/passwd文件中的最后5行

#tail  -5  /etc/passwd

--查看/etc/passwd文件的第10行到最后一行的内容

#tail  +10  /etc/passwd

--监视/vas/log/messages文件是否追加了内容

#tail  -f  /var/log/messages

3)grep

作用:在文本文件中提取匹配的行

格式:grep  [参数] "字符串/正则表达式"  文本文件

参数:

-c 只显示匹配的行的个数,不显示行的内容

-q 只显示查找状态,不显示行的内容

-v 查找不匹配的行

-n 在显示行前标上在文档中的行号

-w 完全匹配

-i 模式匹配时忽略大小写

正则表达式元字符:

^

锚定行的开始 如:'^grep'匹配所有以grep开头的行

$

锚定行的结束 如:'grep$'匹配所有以grep结尾的行

.

匹配一个非换行符的字符 如:'gr.p'匹配gr后接一个任意字符,然后是p

*

匹配零个或多个先前字符 如:' *grep'匹配所有一个或多个空格后紧跟grep的行。

.*一起用代表任意字符

[...]

匹配一个指定范围内的字符,如'[Gg]rep'匹配Grep和grep

[^...]

匹配一个不在指定范围内的字符

\(..\)

标记匹配字符,如'\(love\)',love被标记为1

\<

锚定单词的开始,如:'\

\>

锚定单词的结束,如:'grep\>'匹配包含以grep结尾的单词的行

x\{m\}

重复字符x,m次,如:'0\{5\}'匹配包含5个0的行

x\{m,\}

重复字符x,至少m次,如:'o\{5,\}'匹配至少有5个o的行

x\{m,n\}

重复字符x,至少m次,不多于n次,如:'o\{5,10\}'匹配5-10个o的行

实例:

--在/etc/passwd文件中查找包含字符串root的行并显示

#grep  "root"  /etc/passwd

--在/etc/passwd文件中查找以a/b/d开头的行并显示行内容

#grep  "^[abd]"  /etc/passwd

--统计/etc下以d开头的行数

#ls -l /etc | grep -c "^d"

4)sort

作用:对文本文件进行排序并输出

格式:sort [参数]  文件路径

-f 忽略大小写

-t 指定字段分隔符

-r      降序排列

-n      按数字大小排列

-u 消除重复行

实例:

--输出/etc/passwd文件内容并排序

#sort  /etc/passwd

--对/etc/passwd文件按第三字段排序,以:号字段分隔符,并以数字升序排列

--sort  -t: -n  +2 -3  /etc/passwd

5)uniq

作用:去除文本文件中重复内容并输出

格式:uniq  [参数]  文本路径

-u 输出未重复的内容

-d 输出重复的内容

实例:

--显示/abc/a1文件内容,去除重复,重复的行只显示一行

#uniq  /abc/a1

--显示/abc/a1的未重复内容,重复的行全都不显示

#uniq  -u  /abc/a1

--只显示/abc/a1的重复内容,重复的行只显示一行

#uniq -d  /abc/a1

注:经常结合sort与uniq

如:#sort  /abc/a1 | uniq

6)sed

作用:Sed(a stream editor)是一种流线型、非交互式编辑器。用可利用命令来编辑文件内容并输出

格式:sed  [参数] '子命令'  文件路径

-n 关闭默认显示

-e 多次编辑

子命令:

-p 显示匹配的行

-a 在指定行的后面添加新行

-i 在指定行的前面添加新行

-d 删除匹配的行

-s 修改匹配的行

-r 将指定文件的内容读到当前文件匹配的行的下面

-w 将匹配的内容写到指定的文件中

-y 传送字符,变换字符

-n 读取下一行

-{...} 对匹配的行执行命令组

-q 退出sed

-b 标记 //跳到标记位置

-t 标记 //如果某行发生修改,则跳到指定位置

-T 标记 //如果某行未发生修改,则跳转到指定位置

实例:

-->打印命令:p

--显示/etc/passwd下包含root的行

#sed  -n  '/root/p' /etc/passwd

--显示/etc/passwd下2到15的行

#sed  -n  '2,15p'  /etc/passwd

--显示/etc/passwd下2到末尾的行

#sed  -n  '2,$p'  /etc/passwd

-->删除命令:d

--删除/etc/passwd下以u1开头的行,其余行输出到屏幕

#sed  '/^u1/d' /etc/passwd

--删除/etc/passwd中的第9行,其余行输出到屏幕

#sed  '9d' /etc/passwd

--删除/etc/passwd下含有u1的行,其余行输出到屏幕

#sed  '/u1/d'  /etc/passwd

-->修改命令:s

--将/etc/passwd中所有的root修改为admin,并输出

#sed  's/root/admin/g'  /etc/passwd

--将/etc/passwd中第一行到第五行的root修改为admin,并输出

#sed  '1,5s/root/admin/g' /etc/passwd

-->在指定行的后面添加新行:a

--在/etc/passwd中第3行下面插入一行“linux system”

#sed  '3a \linux system' /etc/passwd

-->在指定行的前面添加新行:i

-在/etc/passwd中第3行前面插入一行“linux system”

#sed  '3i \linux system' /etc/passwd

-->将指定文件的内容读到当前文件匹配的行的下面:r

--将/abc/a1的内容读到/abc/a2第5行的下面

#sed  '5r /abc/a1'  /abc/a2

-->将匹配的内容写到指定的文件中:w

--将/etc/passwd下包含root的行写到/abc/root.txt中

#sed  -n  '/root/w  /abc/root.txt' /etc/passwd

-->传送字符,变换字符:y

--将/abc/a1第2行到第5行的a变为大写A

#sed  '2,5y/a/A/' /abc/a1

-->退出:q

--在打印了5行之后,用q命令退出sed程序。

#sed '5q'  /etc/passwd

8)tr

作用:替换或删除文件中的指定字符

格式:tr [参数] 字符串1  字符串2  文件路径

-c 替换字符

-d 删除字符

-s 替换字符串1   字符串2

字符范围:

[A-Z]

[a-z]

[0-9]

[0*n]    //表示字符0重复出现指定次数n

如:[0*2]匹配00的字符串

\octal

控制字符:

\a 铃声

\b 退格符

\n 新行

\r 回车

\t tab键

通配字符:

[:alnum:] 所有字母和数字

[:alpha:] 所有字母

[:lower:] 所有小写字母

[:upper:] 所有大写字母

[:digit:] 所有数字

[:blank:] 所有空行

[:space:] 所有空格

[:graph:] 所有可显示的字符,不包含空格

[:print:] 所有可显示的字符,包括空格

[:cntrl:] 所有控制字符

[:punct:] 所有标点符号字符

[:xdigit:] 所有十六进制数字

实例:

--去除/abc/a1中的换行符

#tr -d  '\n\r' < /abc/a1

--修改/abc/a1中所有abc为123

#tr 'abc' '123' < /abc/a1

--修改/abc/a1中所有小写字母为大写字母

#tr [:lower:] [:upper:] < /abc/a1

linux过滤脚本中的字段,Shell脚本中常用的文本过滤命令相关推荐

  1. 博主日常工作中使用的shell脚本分享

    前言: 今天给大家分享一篇在我工作中常用的一个shell脚本,里面有一些我们常用到的shell操作.该脚本用于本地电脑和服务器交互上,实现以下功能: 自动拉取自己个人电脑上的源码到服务器上yocto包 ...

  2. linux脚本监控网卡流量,Shell脚本实现linux监控网卡实时流量[带宽]的方法

    今天分享一个Linux网卡实时流量查看的shell脚本. 以下是脚本: #!/bin/bash if [ -z "$1" ]; then echo echo usage: $0 n ...

  3. linux下编写sql脚本,在Linux系统中编写简易shell脚本,向PLSQL表中插入数据

    案例环境: SecureCRT.PLSQLDeveloper 登入现有的linux服务器以及数据库账号.要求linux系统支持sqlplus #1.在PLSQL中创建一个简单的表: create ta ...

  4. linux 脚本中=$4,shell脚本实例,通向shell脚本大师的必经之路

    概述 读书百遍其义自见,shell脚本也是,只要例子看得多了,自然就知道怎么写了.这里主要整理了20几个例子,因为内容比较多,所以分了几次来做介绍了.下面的实例最好先自己思考怎么去实现,然后再看下实现 ...

  5. linux中写脚本一般用语言,shell脚本语言的使用(超全超详细)

    1.shell的概述 shell 是一种脚本语言 脚本:本质是一个文件,文件里面存放的是 特定格式的指令,系统可以使用脚本解析器 翻译或解析 指令 并执行(它不需要编译) shell 既是应用程序 又 ...

  6. linux脚本外输入参数,shell 脚本中关于用户输入参数的处理

    1.命令行参数 向shell脚本传递数据的最基本方式是使用命令行参数. (1) 读取参数 读取输入的参数的变量为位置参数,位置参数通过标准数字表示, 其中$0为程序名称,$1为第一个参数,$2为第二个 ...

  7. linux shell脚本 wget,bash – 在shell脚本中运行wget和其他命令

    以下是编写shell脚本时要使用的一些准则. >使用它们时始终引用变量.这有助于避免误解的可能性. (如果文件名包含空格怎么办?) >不要相信像rm这样的命令上的文件加载.请改用循环. ( ...

  8. linux 并行执行脚本,在bash / linux中并行运行shell脚本

    我有一个shell脚本job.sh. 内容如下: #!/bin/bash table=$1 sqoop job --exec ${table} 现在当我做./job.sh table1 该脚本成功执行 ...

  9. linux 脚本 变量为空,Shell脚本中判断输入变量或者参数是否为空的方法

    1.判断变量 复制代码 代码如下: read -p "input a word :" word if  [ ! -n "$word" ] ;then echo ...

最新文章

  1. 【干货】CNN与Transformer的强强联合!谷歌最新开源BoTNet,ImageNet达84.7%准确率
  2. MySql 基于C_API的数据库封装
  3. python下载不了-python安装不了
  4. 如何用VC++新建一个项目
  5. Java IO: PipedOutputStream
  6. NCRE四级网络工程师考题详解----目录分解法
  7. C/C++开发工具大比拼【转】
  8. java导入包srcy有红叉_eclipse导入项目后出现红色叉号的解决方案
  9. 数据结构:队列的了解与示例(CPU处理任务的时间)
  10. 2007年1月11日~2022年1月11日,我在 SAP 成都研究院这15年
  11. matlab斜抛运动不用公式,分享斜抛运动中算末速度的公式
  12. H5 的直播协议和视频监控方案
  13. html的注释是什么意思,注释是什么意思?
  14. RTKLIB基础函数等
  15. wps 符号操作(仅符号)
  16. win10电脑连接蓝牙请检查PIN并重新连接
  17. php rewrite 开启,Apache Rewrite 开启和使用方法
  18. 985大学计算机专业起薪,985名校毕业生有多值钱?看完这份大学毕业生薪酬榜你就知道了...
  19. Mac安装与配置jmeterjmeter的使用jmeter生成性能测试报告
  20. SecureCRT 设置黑底白字和编码

热门文章

  1. git版本号管理工具的上手
  2. swoole process进程 多分发
  3. laravel conf/app.php
  4. 执行umount 的时候却提示:device is busy 的处理方法
  5. C语言复习之关键字static的作用
  6. 影响LAN/WAN方向流量的方法
  7. 【指标统计】MsgProxy消息代理配置
  8. 求数组的子数组之和的最大值IV
  9. Codeforces #536 div2 E (1106E)Lunar New Year and Red Envelopes (DP)
  10. 关于YOLO算法的备忘