正则表达式与通配符是完全不一样的东西。通配符是bash接口的一个功能,正在表达式是一种字符串处理的表示方式。一些特殊字符的意义:

grep [-acinvAB] [--color=auto] '查找字符串' filename

-a: 将binary文件以text文件的方式查找数据

-c:计算找到‘查找字符串’的次数

-i : 忽略大小写的不同,所以大小写视为相同

-n:显示行号

-v: 反向选择

-A:后面可加数字,是after的意思,除了列出该行外,后续的n行也列出来

-B :后面可加数字,是before的意思,除了列出该行外,前面的n行也列出来

--color=auto:将找到的关键字加上颜色

正则表达式中,^:行首,$:行尾,^$:表示空白行,^在[]中表示反向选择

查找空白行:
grep -n '^$' regular_express.txt
去除shell文本的注释(#开头)去除空白行
grep -v '^$' man.config | grep -v '^#'

点. :表示一定有一个任意字符 *(星号):表示重复前一个0到无穷多次的意思, .* 可表示0个或多个任意字符,而在通配符中*表示0个到无限多个字符,通配符与正则表达式不同!正则表达式表:

扩展的正则表达式,grep默认支持基础正则表达式,如果使用扩展的,则使用grep -E或直接使用egrep

之前的使用grep -v '^$' man.config | grep -v '^#',需要查找两次,如果使用扩展正则表达式则是 egrep -v '^$|^#' man.config,在单引号内|表示or或的意思,通过一次查找将空白行和以#开头的行都去除,扩展正则表达式:


*:0个或多个前一个字符,+:1个或多个前个字符, ?:0个或1个字符,\{n,m\}:n到m个前字符 , \:转义字符

^: 开头,$:结尾,[|:列表 [^]:不包含列表内字符 or查找字符串, ():找出组

!并不是特殊字符

sed命令:

sed [-nefr] 动作
-n:使用安静模式,在一般的sed用法中,所有都会输出在屏幕上,如果加上-n,则只有经过sed特殊处理的行才会列出来
-e:直接在命令行模式上进行sed,默认,可省略
-f: 直接将动作写在一个文件内,-f filename可以直接执行filename的sed动作
-r:支持扩展正则表达式
-i:直接修改读取的内容,而不是由屏幕输出
动作:[n1[,n2]] function,n1,n2代表执行动作的行数,可选
a:新增,a的后面可以接字符串,字符串会在目前下一行(新的一行)出现
c:替换,c的后面可以接字符串,字符串替换在n1,n2之间的行
d:删除,后面通常不接任何参数
i:插入,i后接字符串,字符串会在目前的上一行(新行)出现
p:打印,通常与-n一起使用,只输出打印的行
s:替换,可以搭配正则表达式,与vim替换命令类似,1,20s/old/new/g

删除批注之后的数据,以下删除的数据成了空白行
cat man.config | grep 'MAN' | sed 's/#.*$//g' 
再删除空白行
cat man.config | grep 'MAN' | sed 's/#.*$//g' | sed '/^$/d'
修改原文件,将regular_express.txt内每一行结尾为‘.’换成‘!’
sed -i 's/\.$/!/g' regular_express.txt
在文件最后一行添加‘this is a test’
sed -i '$a this is a test' regular_express.txt

printf格式命令:

printf不是管道命令,所以不能使用|,应该使用$(cmd),如下操作

awk:数据处理工具,sed常常用于一整行的处理,awk倾向于将一行分成数个“字段”来处理,默认的分割符为空格键或tab键

awk '条件类型1{动作1} 条件类型2{动作2}...' filename

$0: 代表一整行数据,$1:第一个字段,$2:第二个字段....,awk以行为一次处理单位,而以字段为最小处理单位,awk的内置变量

NF 每一行($0)拥有的字段总数
NR 目前awk处理的是第几行数据
FS 目前的分割符,默认空格符
如列出第一列,列出目前处理的行数,并说明改行有多少字段:

awk也可以有逻辑运算符:



第一条命令,第一行输出不正确,因为读入第1行时,变量默认是以空格键分割的(鸟哥是这么说的,为啥呢),FS=:的条件仅能在第2行以后生效,但awk可以预设遍历,利用BEGIN关键字就可以了,还有END关键字。

awk的处理流程:

1 读入第一行,并将第一行的数据填入$0,$1,$2等变量中

2 依据条件类型的限制,判断是否需要进行后面的动作

3 做完所有的动作与条件类型

4 若还有行,则重复1,2,3,直到所有数据读取完。


比较文件的工具:

diff,cmp,diff以行为单位进行比较,主要用在新旧版本上的比较, diff也可以比较两个目录的不同,cmp以字节为单位进行比较,

如下比较:

正则表达式与文本格式化处理的更多相关文章

  1. Html5 canvas实现粒子时钟的示例代码

    这篇文章主要介绍了Html5 canvas实现粒子时钟的示例代码,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

  2. HTML5数字输入仅接受整数的实现代码

    这篇文章主要介绍了HTML5数字输入仅接受整数的实现代码,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

  3. html5录音功能实战示例

    这篇文章主要介绍了html5录音功能实战示例的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

  4. 基于 HTML5 WebGL 实现的医疗物流系统

    物联网( IoT ),简单的理解就是物体之间通过互联网进行链接。这篇文章给大家介绍基于 HTML5 WebGL 实现的医疗物流系统,感兴趣的朋友跟随小编一起看看吧

  5. HTML5页面无缝闪开的问题及解决方案

    这篇文章主要介绍了HTML5页面无缝闪开方案,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

  6. HTML5跳转小程序wx-open-launch-weapp的示例代码

    这篇文章主要介绍了HTML5跳转小程序wx-open-launch-weapp的相关知识,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

  7. ios – 使用大写符号在字符串swift中获取URL的正则表达式

    我尝试在文本中获取URL.所以,在此之前,我使用了这样一个表达式:但是当用户输入带有大写符号的URL时(例如Http://Google.com,它与它不匹配)我遇到了问题.我试过了:但什么都没发生.解决方法您可以使用正则表达式中的i内联标志关闭区分大小写,有关可用正则表达式功能的详细信息,请参阅FoundationFrameworkReference.(?ismwx-ismwx)Flagsetti

  8. 在Xcode4中,你可以更改用于显示隐形字符的字符吗?

    我更喜欢VisualStudio显示隐形的方式……

  9. ios – 应用程序商店描述特殊字符

    是不是可以在AppStore描述中使用像星星这样的特殊字符了?我得到这个错误:描述不得包含标记语言.说明不得包含以下字符:★提前致谢:)解决方法仍然允许一些unicode字符.以下字符已经过测试并仍然有效:◆√至于现在他们工作正常,但苹果可以随时再次改变条件.

  10. ios – 将数组中的字符转换为整数

    即使我搜索了文档,我似乎无法弄清楚如何做到这一点.我试图弄清楚如何将数组中索引处的字符转换为整数.例如,假设我有一个名为“容器”的字符数组,我无法弄清楚该怎么做:谢谢您的帮助!解决方法Swift并不容易在原始和类型表示之间进行转换.这是一个在此期间应该有所帮助的扩展:这使您可以非常接近您想要的:对于遇到此问题的任何工程师,请参阅rdar://17494834

随机推荐

  1. 法国电话号码的正则表达式

    我正在尝试实施一个正则表达式,允许我检查一个号码是否是一个有效的法国电话号码.一定是这样的:要么:这是我实施的但是错了……

  2. 正则表达式 – perl分裂奇怪的行为

    PSperl是5.18.0问题是量词*允许零空间,你必须使用,这意味着1或更多.请注意,F和O之间的空间正好为零.

  3. 正则表达式 – 正则表达式大于和小于

    我想匹配以下任何一个字符:或=或=.这个似乎不起作用:[/]试试这个:它匹配可选地后跟=,或者只是=自身.

  4. 如何使用正则表达式用空格替换字符之间的短划线

    我想用正则表达式替换出现在带空格的字母之间的短划线.例如,用abcd替换ab-cd以下匹配字符–字符序列,但也替换字符[即ab-cd导致d,而不是abcd,因为我希望]我如何适应以上只能取代–部分?

  5. 正则表达式 – /bb | [^ b] {2} /它是如何工作的?

    有人可以解释一下吗?我在t-shirt上看到了这个:它似乎在说:“成为或不成为”怎么样?我好像没找到’e’?

  6. 正则表达式 – 在Scala中验证电子邮件一行

    在我的代码中添加简单的电子邮件验证,我创建了以下函数:这将传递像bob@testmymail.com这样的电子邮件和bobtestmymail.com之类的失败邮件,但是带有空格字符的邮件会漏掉,就像bob@testmymail也会返回true.我可能在这里很傻……当我测试你的正则表达式并且它正在捕捉简单的电子邮件时,我检查了你的代码并看到你正在使用findFirstIn.我相信这是你的问题.findFirstIn将跳转所有空格,直到它匹配字符串中任何位置的某个序列.我相信在你的情况下,最好使用unapp

  7. 正则表达式对小字符串的暴力

    在测试小字符串时,使用正则表达式会带来性能上的好处,还是会强制它们更快?不会通过检查给定字符串的字符是否在指定范围内比使用正则表达式更快来强制它们吗?

  8. 正则表达式 – 为什么`stoutest`不是有效的正则表达式?

    isthedelimiter,thenthematch-only-onceruleof?PATTERN?

  9. 正则表达式 – 替换..与.在R

    我怎样才能替换..我尝试过类似的东西:但它并不像我希望的那样有效.尝试添加fixed=T.

  10. 正则表达式 – 如何在字符串中的特定位置添加字符?

    我正在使用记事本,并希望使用正则表达式替换在字符串中的特定位置插入一个字符.例如,在每行的第6位插入一个逗号是什么意思?如果要在第六个字符后添加字符,请使用搜索和更换从技术上讲,这将用MatchGroup1替换每行的前6个字符,后跟逗号.

返回
顶部