Shell 删除文件中包含特定字符的句子,利用正则表达式删除包含某个单词的句子不是件难事。本章给出了一个解决类似问题的方法。sed
是进行文本替换的不二之选。我们可以使用sed
将匹配的句子替换成空白。
实战演练
先创建一个包含替换文本的文件。例如:
我们的目标是删除包含mobile phones
的句子。可以用下面的sed
语句来实现:
这里假设文件中没有出现跨行的句子。也就是说,句子总是完整地出现在同一行中。
工作原理
sed
的正则表达式s/ [^.]*mobile phones[^.]*\.//g
采用的格式为s/substitution_pattern/replacement_string/g
。它将与substitution_pattern
相匹配的每一处内容都用replacement_string
替换掉。
本例中的substitution_pattern
是用来匹配整句文本的正则表达式。文件中的每一句话都是以空格开头,以.
结尾。正则表达式要匹配内容的格式就是:空格+若干文本+需要匹配的字符串+若干文本+句点。一个句子中除了作为分隔符的句点之外,可以包含任意字符。因此需要使用[^.]
,该模式可以匹配除句点之外的任意字符。*
表示之前的字符可以出现任意多次。用来匹配文本的mobile phones
被放置在两个 [^.]*
之间。每一个匹配的句子均被//
替换(注意,/
与/
之间没有任何内容)。
学习本章内容可以参考如何使用正则表达式 和 sed 命令 相关知识。