正则表达式
--概念:一种用来描述文本模式的特殊语法
--由普通字符(例如:字符a到z),以及特殊字符(元字符,如/*?等)组成匹配的字符串
--文本过滤工具在某种模式之下,都支持正则表达式
--基本元字符集及其含义
^ 只匹配行首
$ 只匹配行尾
* 一个单字符后紧跟*,匹配0个或多个此单字符
[] 匹配[]内字符。可以使一个单字符,也可以是字符序列。可以使用"-"表示[]内字符序列范围,如用[1-5]代替[12345]
\ 用来屏蔽一个元字符的特殊含义。因为有时在shell中一些元字符有特殊含义。"\"可以使其失去应有意义
. 匹配任意单字符
pattern\{n\} 用来匹配pattern出现次数,n为次数,(这里的大括号需要转义,和javascript不同)
pattern\{n,\} 含义同上,但次数最少为n
pattern\{n,m\} 含义同上,但pattern出现次数在n与m之间
--特殊:"^$"匹配空行 "^.$"匹配包含一个字符的行
--shell中似乎没有javascript中的\S,\w等元字符
xargs
--对于find命令查找的文件列表,想使用grep命令查找指定文件,但是有时候文件太多了,超过了grep命令的上限,就有了可能报错
--xargs的作用是:find命令把匹配到的文件传递给xargs命令,而xargs命令每次只获取一部分文件而不是全部,
这样他可以先处理最先获取的一部分文件,然后是下一批,并如此继续下去
--常见用法: find . -name "*" | xargs grep "hostname"
--注意:在find和grep中,如果不使用xargs,可能无法查出正确结果
grep
--功能:按照行方式处理文本
--语法格式: grep [选项] 基本正则表达式 [文件](没有文件也可以来自管道)
--参数
-n 显示匹配行及行号
-v 显示不包含匹配文本的所有行
--grep中的正则表达式不需要使用//
--例如:grep "^2014&" 1.c  --在1.c文件中查找以2014开头并且以2014结尾的字符串
awk
--参数
-F 指定分隔符
--例子①:awk -F ":" '{print $1 "--" $3}' passwd.txt
详解:'{print $1 "--" $3}',print $1打印第一列的数据,"--"用"--"来分割第一列和第三列数据,这里必须加双引号
--②:awk -F ":" '$3>499 {print $1 "\t" $3}' passwd
详解:$>499指的是第三列的值大于499的列
--$0表示一行的所有数据
--awk获取倒数第一个域$(NF-0),倒数第二个域是$(NF-1)
awk多条件判断
.awk中的判断符号和条件测试中的判断符号是不同的,awk中只有"=","!=","<",">"
.awk中多条件的连接符是"&&"(与)和"||"(或)
例如:awk -F "\t" '$2>=2 && $2<=5 {printf $0}' 1.c
--表示筛选第二列中大于等于2并且小于等于5的数据
sort
sort -n -k7
--"-n"按行排序,"-k[n]"按第n列升序排序
sort -n -k7 -r
--降序排列
tail -[n]
--从底下往上取n行
head -[n]
--从上往下取n行
wc -c
--显示总共有多少字符
wc -l
--显示总共有多少行
sed
--语法结构 sed options ... [script] ... [inputfile]
--如果没有输入文件,则sed默认对标准输入进行处理(即键盘输入)。脚本命令是第一个不以"-"开始的参数
--常用选项
-n 静默输出
-e 允许多个脚本指令被执行
-i 直接修改源文件,经过脚本指令处理过的内容将被输出至源文件(源文件被修改,慎用)
--常用用法
--按照一个范围(第几行到第几行)。提取数据
--sed的主要用法是编辑功能...对提取的数据,进行修改,替换,编辑,删除,插入等操作
--sed通过读取读取文件内容,但一次仅读一行内容进行指令操作后输出,所以sed更适合处理大数据文件。
--sed -n 'p' 文件名
详解:打印文件中所有行,包括空行,"p"表示打印行数据
$p表示最后一行;sed -n '$=' 获取最后一行的行号
--sed -n '3,/ddd/p' 文件名
详解:从第三行开始匹配,打印含有ddd的行,、
--sed -n '/^$/=' 文件名
详解:打印空行的行号,"="表示打印行号,不打印行数据
--sed多条指令的执行方法1 sed -n -e '3p' -e '/^$/=' .c
详解:通过仔细观察发现,如果第二行是空行,会先打印第二行的行号,再打印第三行,
这是因为sed是一行行的读取数据的
--sed多条指令执行方法2 sed -n '3p;/^$/=' .c
注意用分隔符";"分开
--sed脚本操作选项
a(append) 追加
i(insert) 插入
d(delete) 删除
s(substitution) 替换
--例子:
--sed '2a 大较好' 文件名
详解:向文本第二行后面追加"大家好"字符串(有换行问题)
--sed '3i 大家好' 文件名
详解:向文本第三行前插入"大家好"字符串(有换行问题)
--sed 's/匹配原来的字符串正则表达式/向替换的字符/g' 文件名
详解"s"表示是替换的意思,"g"表示全文的意思
--sed '3,4d' 文件名
详解:删除第三行到第四行的数据
--sed 's/hello//g' 文件名
详解:把全文的hello替换成空字符串
--注意:sed语法中,如果需要使用shell变量,那么不能加"'"单引号,并且变量必须使用${}形式
例如:ipcs | sed -n ${变量1},${变量2}p

Linux shell文本过滤的更多相关文章

  1. Linux Shell编程学习笔记——目录(附笔记资源下载)

    LinuxShell编程学习笔记目录附笔记资源下载 目录(?)[-] 写在前面 第一部分 Shell基础编程 第二部分 Linux Shell高级编程技巧 资源下载 写在前面 最近花了些时间学习She ...

  2. linux shell编程总结

    linux shell编程总结 本周学习了unix/linux shell编程,参考的是<LINUX与UNIX Shell 编程指南>,David Tansley著:徐焱,张春萌等译,由机 ...

  3. linux shell 中的sleep命令

    开始还以为是这样的语法: sleep(1), 后面发现是: linux shell 中的sleep命令 分类: LINUX 在有的shell(比如linux中的bash)中sleep还支持睡眠(分,小 ...

  4. Linux shell脚本编程(三)

    Linux shell脚本编程 流程控制: 循环语句:for,while,until while循环: while CONDITION; do 循环体 done 进入条件:当CONDITION为“真” ...

  5. Linux shell脚本编程(二)

    Linux shell脚本编程(二) 练习:求100以内所有偶数之和; 使用至少三种方法实现; 示例1: #!/bin/bash # declare -i sum=0 #声明一个变量求和,初始值为0 ...

  6. Linux shell脚本编程(一)

    Linux shell脚本编程: 守护进程,服务进程:启动?开机时自动启动: 交互式进程:shell应用程序 广义:GUI,CLI GUI: CLI: 词法分析:命令,选项,参数 内建命令: 外部命令 ...

  7. Linux Shell 流程控制语句

    * 本文主要介绍一些Linux Shell 常用的流程控制语句* 1. if 条件语句:if-then/if-elif-fi/if- else-fi if [条件判断逻辑1];then command ...

  8. Linux Shell 截取字符串

    Linux Shell 截取字符串 shell中截取字符串的方法很多 ${var#*/} ${var##*/} ${var%/*} ${var%%/*} ${var:start:len} ${var: ...

  9. Linux Shell 重定向与管道【转帖】

    by 程默 在了解重定向之前,我们先来看看linux 的文件描述符. linux文件描述符:可以理解为linux跟踪打开文件,而分配的一个数字,这个数字有点类似c语言操作文件时候的句柄,通过句柄就可以 ...

随机推荐

  1. 使用开源免费类库在.net中操作Excel

    自从上次找到NPOI之后,根据园友提供的线索以及Google,又找到了一些开源免费的类库,所以都简单体验了一遍. 主要找到以下类库: MyXls(http://sourceforge.net/proj ...

  2. Lambda 表达式(C# 编程指南) 微软microsoft官方说明

    Visual Studio 2013 其他版本 Lambda 表达式是一种可用于创建委托或表达式目录树类型的匿名函数. 通过使用 lambda 表达式,可以写入可作为参数传递或作为函数调用值返回的本地 ...

  3. php 操作mysql 分表的一种方法

    aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAARUAAAHXCAIAAAAdrFkKAAAgAElEQVR4nOyd61sTx9//+4fcj+6H95

  4. github代码上传之命令提交

    Git GUI的用法比较简单,随便弄弄就可以将本地git库中的代码提交到远端github服务器,所以想把Git bash这玩意儿的操作流程快速过一遍,主要是做个笔记,以后忘记了可以看看怎么操作的. 首 ...

  5. Vmware快速安装linux虚拟机(SUSE)

    安装环境:Vmware 11.SUSE11 64位 vmware快速安装linux虚拟机的过程还是比较简单的,步骤如下: 1.点击文件,新建虚拟机. 2.选择典型安装. 3.在红框中选择想要安装的虚拟 ...

  6. druid连接池异常

    在从excel导入10W条数据到mysql中时,运行一段时间就会抛这个异常,连接池问题 org.springframework.transaction.CannotCreateTransactionE ...

  7. mysql Lock wait timeout exceeded; try restarting transaction

    查看innodb的事务表INNODB_TRX,看下里面是否有正在锁定的事务线程,看看ID是否在show full processlist里面的sleep线程中,如果是,就证明这个线程事务一直没有com ...

  8. Bug #19528825 "UNABLE TO PURGE A RECORD"

    概述: 在生产环境中,当开启insert buffer时(参数innodb_change_buffering=all),部分实例偶尔会出现“UNABLE TO PURGE A RECORD”错误.这个 ...

  9. 按要求编写一个Java应用程序: (1)编写一个矩形类Rect,包含: 两个属性:矩形的宽width;矩形的高height。 两个构造方法: 1.一个带有两个参数的构造方法,用于将width和height属性初化; 2.一个不带参数的构造方法,将矩形初始化为宽和高都为10。 两个方法: 求矩形面积的方法area() 求矩形周长的方法perimeter() (2)通过继承Rect类编写一个具有确定位

    package com.hanqi.test; public class Rect { ; ; public double getWidth() { return width; } public vo ...

  10. sql server 警报管理,实时监听数据库动向,运筹帷幄之中

    工作这么多年了,无论是身边的同学还是同事,发现只要搞程序员的都有一个通病---懒.懒到谁都不愿意加班,尤其是"义务"加班.即使大家都不愿意加班,但是很多时候项目赶着上线或者上线之后 ...