Linux 正则表达式 vi, grep, sed, awk
1. vi
表示内容的元字符
|
模式 |
含义 |
|
. |
匹配任意字符 |
|
[abc] |
匹配方括号中的任意一个字符。可以使用-表示字符范围,如[a-z0-9]匹配小写字母和阿拉伯数字。 |
|
[^abc] |
在方括号内开头使用^符号,表示匹配除方括号中字符之外的任意字符。 |
|
\d |
匹配阿拉伯数字,等同于[0-9]。 |
|
\D |
匹配阿拉伯数字之外的任意字符,等同于[^0-9]。 |
|
\x |
匹配十六进制数字,等同于[0-9A-Fa-f]。 |
|
\X |
匹配十六进制数字之外的任意字符,等同于[^0-9A-Fa-f]。 |
|
\w |
匹配单词字母,等同于[0-9A-Za-z_]。 |
|
\W |
匹配单词字母之外的任意字符,等同于[^0-9A-Za-z_]。 |
|
\t |
匹配<TAB>字符。 |
|
\s |
匹配空白字符,等同于[ \t]。 |
|
\S |
匹配非空白字符,等同于[^ \t]。 |
|
\a |
所有的字母字符. 等同于[a-zA-Z] |
|
\l |
小写字母 [a-z] |
|
\L |
非小写字母 [^a-z] |
|
\u |
大写字母 [A-Z] |
|
\U |
非大写字母 [^A-Z] |
表示数量的元字符
|
模式 |
含义 |
|
* |
匹配0-任意个 |
|
\+ |
匹配1-任意个 |
|
\? |
匹配0-1个 |
|
\{n,m} |
匹配n-m个 |
|
\{n} |
匹配n个 |
|
\{n,} |
匹配n-任意个 |
|
\{,m} |
匹配0-m个 |
|
\_. |
匹配包含换行在内的所有字符 |
|
\{-} |
表示前一个字符可出现零次或多次,但在整个正则表达式可以匹配成功的前提下,匹配的字符数越少越好 |
|
\= |
匹配一个可有可无的项 |
|
\_s |
匹配空格或断行 |
表示转义和位置的元字符
| 模式 | 含义 | 模式 | 含义 |
| \* | 匹配 * 字符 | $ | 匹配行尾 |
| \. | 匹配 . 字符 | ^ | 匹配行首 |
| \/ | 匹配 / 字符 | \< | 匹配单词词首 |
| \\ | 匹配 \ 字符 | \> | 匹配单词词尾 |
| \[ | 匹配 [ 字符 |
替换变量
在正规表达式中使用 \( 和 \) 符号括起正规表达式,即可在后面使用\1、\2等变量来访问 \( 和 \) 中的内容。
懒惰模式
\{-n,m} 与\{n,m}一样,尽可能少次数地重复
\{-} 匹配它前面的项一次或0次, 尽可能地少
2. grep (global regular expression and print the line)
^
锚定行的开始 如:'^grep'匹配所有以grep开头的行。
$
锚定行的结束 如:'grep$'匹配所有以grep结尾的行。
.
匹配一个非换行符的字符 如:'gr.p'匹配gr后接一个任意字符,然后是p。
*
匹配零个或多个先前字符 如:'*grep'匹配所有一个或多个空格后紧跟grep的行。 .*一起用代表任意字符。
[]
匹配一个指定范围内的字符,如'[Gg]rep'匹配Grep和grep。
[^]
匹配一个不在指定范围内的字符,如:'[^A-FH-Z]rep'匹配不包含A-F和H-Z的一个字母开头,紧跟rep的行。
\(..\)
标记匹配字符,如'\(love\)',love被标记为1。
\<
锚定单词的开始,如:'\<grep'匹配包含以grep开头的单词的行。
\>
锚定单词的结束,如'grep\>'匹配包含以grep结尾的单词的行。
x\{m\}
重复字符x,m次,如:'o\{5\}'匹配包含5个o的行。
x\{m,\}
重复字符x,至少m次,如:'o\{5,\}'匹配至少有5个o的行。
x\{m,n\}
重复字符x,至少m次,不多于n次,如:'o\{5,10\}'匹配5--10个o的行。
\w
匹配文字和数字字符,也就是[A-Za-z0-9],如:'G\w*p'匹配以G后跟零个或多个文字或数字字符,然后是p。
\W
\w的反置形式,匹配一个或多个非单词字符,如点号句号等。
\b
单词锁定符,如: '\bgrep\b'只匹配grep。
egrep 支持 +, ?, | 等
3. sed - stream editor for filtering and transforming text
sed每次处理一行内容。处理时先把当前要处理的行存储在临时缓冲区,(称为“模式空间”,pattern space),用sed命令处理完成后(命令hHgGx用于处理hold space,跟模式空间一起完成处理),把缓冲区的内容送往output(即屏幕)。然后处理下一行,依次重复到文件末尾。sed不改变文件的内容变,但可以将结果重定向。
sed定址:
可以直接通过指定行数或者模式或者二者的组合选定要进行编辑的行, 如果不指定则处理所有的行。
sed '2,5d' file # 删除第2~5行
sed-n'3p' file # 只打印第三行 -n表示不打印匹配的行
sed'/My/,/You/d' file # 删除my~You之间的行
| 命令 | 功能 |
| a\ |
在当前行后添加一行或多行。多行时除最后一行外,每行末尾需用“\”续行 |
| c\ | 用此符号后的新文本替换当前行中的文本。多行时除最后一行外,每行末尾需用"\"续行 |
| i\ | 在当前行之前插入文本。多行时除最后一行外,每行末尾需用"\"续行 |
| d | 删除行 |
| h | 把模式空间里的内容复制到暂存缓冲区 |
| H | 把模式空间里的内容追加到暂存缓冲区 |
| g | 把暂存缓冲区里的内容复制到模式空间,覆盖原有的内容 |
| G | 把暂存缓冲区的内容追加到模式空间里,追加在原有内容的后面 |
| l | 列出非打印字符 |
| p | 打印行(模式空间) |
| n | 读入下一输入行,并从下一条命令而不是第一条命令开始对其的处理 |
| r | 从文件中读取输入行 |
| ! | 对所选行以外的所有行应用命令 |
| s | 用一个字符串替换另一个 |
| g | 在行内进行全局替换 |
| w | 将所选的行写入文件 |
| x | 交换暂存缓冲区与模式空间的内容 |
| y | 将字符替换为另一字符(不能对正则表达式使用y命令) |
| 元字符 | 功能 | 示例 |
| ^ | 行首定位符 | /^my/ 匹配所有以my开头的行 |
| $ | 行尾定位符 | /my$/ 匹配所有以my结尾的行 |
| . | 匹配除换行符以外的单个字符 | /m..y/ 匹配包含字母m,后跟两个任意字符,再跟字母y的行 |
| * | 匹配零个或多个前导字符 | /my*/ 匹配包含字母m,后跟零个或多个y字母的行 |
| [] | 匹配指定字符组内的任一字符 | /[Mm]y/ 匹配包含My或my的行 |
| [^] | 匹配不在指定字符组内的任一字符 | /[^Mm]y/ 匹配包含y,但y之前的那个字符不是M或m的行 |
| \(..\) | 保存已匹配的字符 | 1,20s/\(you\)self/\1r/ 标记元字符之间的模式,并将其保存为标签1,之后可以使用\1来引用它。最多可以定义9个标签,从左边开始编号,最左边的是第一个。此例中,对第1到第20行进行处理,you被保存为标签1,如果发现youself,则替换为your。 |
| & | 保存查找串以便在替换串中引用 | s/my/**&**/ 符号&代表查找串。my将被替换为**my** |
| \< | 词首定位符 | /\<my/ 匹配包含以my开头的单词的行 |
| \> | 词尾定位符 | /my\>/ 匹配包含以my结尾的单词的行 |
| x\{m\} | 连续m个x | /9\{5\}/ 匹配包含连续5个9的行 |
| x\{m,\} | 至少m个x | /9\{5,\}/ 匹配包含至少连续5个9的行 |
| x\{m,n\} | 至少m个,但不超过n个x | /9\{5,7\}/ 匹配包含连续5到7个9的行 |
sed 不管是否找到指定的模式,退出状态都是0。只有当命令存在语法错误时,sed的退出状态才不是0。
4. awk - pattern scanning and processing language
awk 命令逐行扫描文件,寻找匹配特定模式的行,并在这些行上进行操作。命令语法:
awk -F域分隔符 'command' file
或
awk -f script-file file
command 由pattern + {action}组成,两者均为可选。如果没有指定模式,则应用到所有行;如果没有指定动作,则打印到标准输出 (屏幕)。
模式可以为:
/正则表达式/
关系表达式
模式匹配表达式: ~ 和 ~!
行的范围
BEGIN
END
action可以为:
变量或数组赋值
输出
函数操作
控制流命令
Linux 正则表达式 vi, grep, sed, awk的更多相关文章
- [svc]linux正则实战(grep/sed/awk)
企业实战: 过滤ip 过滤出第二行的 192.168.2.11. eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 ine ...
- linux 三大利器 grep sed awk 正则表达式
正则表达式目标 正则表达式单字符: 特定字符 范围字符:单个字符[ ] :代表查找单个字符,括号内为字符范围 数字字符:[0-9],[259] 查找 0~9 和 2.5 .9 中的任意一个字符 小写字 ...
- linux 三剑客命令(grep,sed ,awk)
grep 命令 :强大的文本’搜索’工具 1.grep -n 'word' file_name 在file_name文件中找到word所在的所有行并显示.-n 为显示行号. 2 ...
- linux 三大利器 grep sed awk sed
sed主要内容和原理介绍 sed 流处理编辑器 sed一次处理一行内容,读入一行处理一行 sed不改变文件内容(除非重定向) sed 命令行格式 $ sed [options] 'command' f ...
- linux(5)--补充(管道| / 重定向> / xargs)/find 与xargs结合使用/vi,grep,sed,awk(支持正则表达式的工具程序)
本节中正则表达式的工具程序 grep,sed和awk是重点,也是难点!!! 先补充一下一. 管道| / 重定向> / xargs 如:1. 管道和重定向的区别:具体可以见 http://www. ...
- Linux三剑客grep/sed/awk
grep/sed/awk被称为linux的“三剑客” grep更适合单纯的查找或匹配文本: sed更适合编辑匹配到的文本: awk更适合格式化文本,对文本进行较复杂各式处理: Grep --color ...
- linux三剑客grep|sed|awk实践
最好先学习正则表达式的基本用法,以及正则表达式BREs,EREs,PREs的区别 此坑待填 grep sed awk
- [Linux]正则表达式和grep使用【转载】
[Linux]正则表达式和grep使用 2018年12月05日 23:45:54 祥知道 阅读数 78 标签: 正则表达式grepLinuxegrep 更多 个人分类: Linux 所属专栏: Li ...
- 【Linux】 字符串和文本处理工具 grep & sed & awk
Linux字符串&文本处理工具 因为用linux的时候主要用到的还是字符交互界面,所以对字符串的处理变得十分重要.这篇介绍三个常用的字符串处理工具,包括grep,sed和awk ■ grep ...
随机推荐
- RNQOJ Jam的计数法
题目:https://www.rqnoj.cn/problem/3 非递归做法:(严格递增 单调大于 不可等于 ) 做法:循环体 <1>操作字符串 str 从后往前找,k=1,如果s[w ...
- POJ 3254:Corn Fields(状态压缩DP)
题目大意:一个矩形的草地,分为多个格子,有的格子可以有奶牛(标为1),有的格子不可以放置奶牛(标为0),计算摆放奶牛的方案数. 分析: f[i,j]表示第i行状态为j的方案总数. 状态转移方程f[i, ...
- ACdream 1738 世风日下的哗啦啦族I(分块大法+二分)
世风日下的哗啦啦族I Time Limit: 4000/2000MS (Java/Others) Memory Limit: 128000/64000KB (Java/Others) Submit S ...
- [51nod 1022] 石子归并v2 [dp+四边形不等式优化]
题面: 传送门 思路: 加强版的石子归并,现在朴素的区间dp无法解决问题了 首先我们破环成链,复制一条一样的链并粘贴到原来的链后面,变成一个2n长度的序列,在它上面dp,效率O(8n^3) 显然是过不 ...
- 共鸣(resonance)
共鸣(resonance) 题目描述 GHQ通过在24区引起基因组共鸣,从而引发了第二次失落的圣诞. 24区的地图可以视为一个二维平面.GHQ在24区布置了m架发射塔,而葬仪社也建立了n个据点.要阻止 ...
- 0-Android使用Ashmem机制进行跨进程共享内存
Android使用Ashmem机制进行跨进程共享内存 来源: http://blog.csdn.net/luoshengyang/article/details/6651971 导语: 在Androi ...
- Codeforces Round #321 (Div. 2) B 二分+预处理
B. Kefa and Company time limit per test 2 seconds memory limit per test 256 megabytes input standard ...
- 编译安装的php 安装pdo_mysql扩展(php版本5.6.29)
1.进入扩展目录 cd /etc/php-/ext/pdo_mysql/ 注:根据自己情况做适当改变 2.执行phpize /etc/php-/scripts/phpize 3.编译 ./config ...
- [LeetCode] Populating Next Right Pointers in Each Node 深度搜索
Given a binary tree struct TreeLinkNode { TreeLinkNode *left; TreeLinkNode *right; TreeLinkNode *nex ...
- hdu 1848 Fibonacci again and again 组合游戏 SG函数
题目链接 题意 三堆石子,分别为\(m,n,p\)个,两人依次取石子,每次只能在一堆当中取,并且取的个数只能是斐波那契数.最后没石子可取的人为负.问先手会赢还是会输? 思路 直接按定义计算\(SG\) ...