如何在grep和sed命令中使用扩展的正则表达式

2 篇文章 0 订阅
2 篇文章 0 订阅

对于grep,可以使用egrep命令来替代,那么就支持扩展的正则表达式了。

对于sed,只要加上参数-r就可以支持扩展的正则表达式了。

由于平时写python用的正则表达式大部分都是扩展的正则表达式,所以,出于习惯,我喜欢更自由的扩展的正则表达式,使用起来不用去考虑是否支持的问题。


以下是使用的例子,假设有一堆文件,内容都是诸如:

snme0001 今天心情不错!

stta0001 明天是周五。

seef0001 能把你的IPAD借给我玩玩吗?


我们想把这些文件中不含有英文的句子合并到一个大文件中,我使用如下命令:

egrep '[[:alpha:]]{4}[[:digit:]]{4}' $'\t' * | cut -d ":" -f2 | sed -e 'y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/' - | sed -r -e '/\t.*[a-zA-Z]/!w ../M1.txt'


1. 首先把这些文件中符合句子ID格式的句子都抓出来。对于tab,egrep没有特别好的方法来匹配,必须用$'\t'来表示,而且由于$是个特殊符号,所以得把tab专门抽出来,而不能和其他的字符或者模式放到一个模式里。另外,*表示当前文件夹下的所有文件。

2. 抓取ID和句子。之所以用cut,因为egrep抓出来的句子的前边有文件名和冒号。所以,正好用cut,获取以冒号来分割的第二部分。

3. 由于有些句子的ID是大写字母,这里要全部转为小写字母。tr命令这里实在是不好用,因为它只能对文件进行处理。又不太会用awk,所以就用了sed的这个替换功能。y表示替换命令,然后要替换字符对前后来写,所以ABCD..和abcd的数目要相同。

4. 这里用到了!,这个表示符号条件的就不执行命令,不符合的才执行。也就是说,凡是在tab后出现了英文字母的句子,就不写到某个文件内。在sed里,是可以用\t来表示tab的,比较好。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值