正则表达式并不关心模式在数据流中的位置。它也不关心模式出现了多少次。一旦正则表达式匹配了文本字符串中任意位置上的模式,它就会将该字符串传回Linux工具。
关键在于将正则表达式模式匹配到数据流文本上。重要的是记住正则表达式对匹配的模式非常挑剔。第一条原则就是:正则表达式模式都区分大小写。这意味着它们只会匹配大小写也相符的模式。
$ echo "This is a test" | sed -n '/this/p'
$
$ echo "This is a test" | sed -n '/This/p'
This is a test
$
第一次尝试没能匹配成功,因为this在字符串中并不都是小写,而第二次尝试在模式中使用大写字母,所以能正常工作。
在正则表达式中,不用写出整个单词。只要定义的文本出现在数据流中,正则表达式就能够匹配。
$ echo "The books are expensive" | sed -n '/book/p'
The books are expensive
$
尽管数据流中的文本是books,但数据中含有正则表达式book,因此正则表达式模式跟数据匹配。当然,反之正则表达式就不成立了。
$ echo "The book is expensive" | sed -n '/books/p'
$
完整的正则表达式文本并未在数据流中出现,因此匹配失败,sed编辑器不会显示任何文本。
也不用局限于在正则表达式中只用单个文本单词,可以在正则表达式中使用空格和数字。
$ echo "This is line number 1" | sed -n '/ber 1/p'
This is line number 1
$
在正则表达式中,空格和其他的字符并没有什么区别。
$ echo "This is line number1" | sed -n '/ber 1/p'
$
如果在正则表达式中定义了空格,那么它必须出现在数据流中。甚至可以创建匹配多个连续空格的正则表达式模式。
$ cat data
This is a normal line of text.
This is a line with too many spaces.
$ sed -n '/ /p' data
This is a line with too many spaces.
$
单词间有两个空格的行匹配正则表达式模式。这是用来查看文本文件中空格问题的好办法。