正则表达式基础字符匹配2
来源:互联网 发布:如何参加爱淘宝 编辑:程序博客网 时间:2024/05/20 08:25
上个博文记录了正则表达式的基本代换规则,
http://blog.csdn.net/crazyss/article/details/7057546
这次先通过几个问题回忆一下:
1如何代换空行:
/^$/在脚本中,^代表行首,$代表行尾。这个行首不是行的第一个字母而是第一个字母前面的空位,这一点非常重要。
2如何在行首加入指定字符:
例如:在行首加入'#',这个符号是注释的意思。
s/^/#/
前面的s先不去看它,后面的^,#代表行首和加入到行首的字符。前面的s是什么意思这篇博文再看。
在Linux系统中,有两个工具可以处理正则表达式。sed 和 awk。我们先看sed。
sed从本质上来讲是一个文本流处理器。而文本流是一种叫做文件的东西。这个定义我相信大家应该没有什么可以质疑的,新手总是不知道“流”是什么东西。在这里“流”就是字符序列。而文件的定义就是字符序列。
再来看sed的基本用法
sed 'script' files
files 是一个或多个文件的列表,script是如下形式的一个或多个命令:
/pattern/ action
他的具体格式应该如下:
sed '/pattern/ action' files
pattern 是过文化正则表达式,action是下列命令之一。如果pattern被省略,输入的每一行都被操作。action描述p打印d删除s用一个表达式置换另一个表达式
我们用一个小的关于水果的报价单来看看如何使用sed来过滤
cat fruit_prices.txtFruit Price/lbsBanan 0.89Paech 0.79Kiwi 1.50Pineapple 1.29Apple 0.99Mango 2.20
sed '/ 0\.[0-9][0-9]$/p' fruit_prices.txt这个正则表达式的含义是待定模式应该是0开头,接下来是一个点,再下来是两位数字,再下来是$这意味着这个字符串应该位于结尾,然后是动作p打印。
使用这个例子如果在机器上验证呢?
首先使用vi fruit_prices.txt建立一个文件,并且输入水果价格。
然后再在命令行中输入上面的命令。
然而你看到的应该是这样的内容:
Fruit Price/lbsBanan 0.89Banan 0.89Paech 0.79Paech 0.79Kiwi 1.50Pineapple 1.29Apple 0.99Apple 0.99Mango 2.20我们想要得到1美元以下的水果,为什么出现这么多呢?仔细观察好像有好多记录都是重复的这是因为sed默认情况下会输出每一行,再输出你选定的行,这意味着你可能会看到两次你要的行。
修改一下命令:
sed -n ' 0\.[0-9][0-9]$/p' fruit_prices.txt
这模式前面加上一个-n选项,sed就不会输出"非选中行"了。
还可以删除指定的行
/pattern/d
sed '/^[Mn]ango/d' fruit_prices.txt
需要注意,sed命令并不会改变文件的真实内容,它只会将修改输出,如果你想真的修改文件需要使用重定向。
还可以替换指定单词
/pattern1/s/pattern2/pattern3/使用如下格式替换
sed 's/eqal/equal/g' nsh.txt可以替换eqal为equal,在整个文件中。
还有有一个功能
sed 's/ *[0-9[0-9]*\.[0-9][0-9]$/\$&/' fruit_prices.txt其中第而二个$后面的&是代替前面所匹配到的字符的。这个功能就是把所有价格前面加上一个$符号。
可以一次性执行多个命令
sed -e 's/Paech/Peach/' -e 's/ *[0-9][0-9]*\.[0-9][0-9]$/\$&/' fruit_prices.txt它的格式是:
sed -e 'cmd1' ... -e 'cmdN' files
- 正则表达式基础字符匹配2
- 正则表达式基础字符匹配
- 正则表达式字符匹配
- 正则表达式字符匹配
- 正则表达式基础精简篇之一 (单字符匹配)
- 正则表达式中的字符匹配
- 正则表达式匹配任意字符
- 正则表达式匹配字符含义
- 正则表达式的匹配字符
- 正则表达式的匹配字符
- 正则表达式 匹配特殊字符
- 正则表达式:匹配任意字符
- 正则表达式匹配任意字符
- 正则表达式匹配任意字符
- 正则表达式匹配任意字符
- 正则表达式匹配中文字符
- 正则表达式匹配任意字符
- 正则表达式匹配任意字符
- C++中friend的使用(friend function and friend class)
- 一开电脑就打印的解决办法
- 设计组织树 通过java拼接xml组织树 实现界面组织树 通过数据库配置动态决定菜单树显示与否、排列优先
- 水晶报表--excel(下)
- Java核心技术1-3章
- 正则表达式基础字符匹配2
- 如何自学java迅速成为java高手
- Struts2整合JSON
- 谷歌最新创意人体LOGO
- OSCache介绍
- 在Oracle库中查找所有表的相关信息
- ORA-27101: shared memory realm does not exist 错误的处理
- down_interruptible()
- log4j中配置日志文件相对路径