以句号或分号结束的列表行

我怎样才能使用grep或egrep来编写一个命令来显示文件中以分号“;”或句号“。”结尾的所有行。

grep (和egrep )一个美元符号( $ )匹配一行的结尾,并且一个carret( ^ )匹配一行的开始。 所以,例如,如果你想匹配包含“fish”这个单词的行,而没有其他字符,你可以使用这个:

 grep '^fish$' 

使用单引号来包装搜索表达式是很重要的,这样bash不会对它做任何有趣的事情。

所以,要回答你的问题,你需要使用搜索模式'[.;]$'来匹配一个.; 字符后跟行尾字符。 我用这个作为例子测试文件:

 $ cat testfile one two; three. four: 

结果如下:

 $ grep '[.;]$' testfile two; three. 

如果您还想在行尾添加空格,则使用以下模式: '[.;][ \t]*$' ,它将与任意数量的空格或制表符匹配.;

这应该做到这一点:

 $ grep -E '(;|\.)$' 

-E开关启用正则表达式模式。 该表达式简单地匹配以分号或句点结尾的行。

注意:我没有测试过这个。

没有-E

 grep '\.\|;$' filename 

用sed:

 sed -rn '/(\.|;)$/p' 

用awk

 awk '/(\.|;)$/' 

三种方式:这些都为我工作。

一:

 grep '[\.;]$' your_file 

二:

 awk '/\.$/ || /;$/' your_file 

三:

 awk '/[\.;]$/' your_file