Grep 字符串以 .或空格

Grep string start with . or whitespace

我是 运行 一个获取参数的脚本 </code></p> <p>我想查找在该参数之前以 space 或 <code>. 开头的所有字符串。 并以 .% 结尾
例如:

如果 是表 1 那么

1) "Table1"
2) "表 1"
3) ".表 1"
4) "Table1."
5) “.表 1。”
6) " Table1."
7) ".Table1%"
8) “表 1%”

应该不错

$ cat input_file.txt
Table1
 Table1
.Table1
Table1.
.Table1.
 Table1.
.Table1%
 Table1%
# the following should not match:
-Table1%
.Table1-
&Table1
Table10
myTable1

如果"finding all strings"是指"whole lines",那很简单:

$ grep "^[. ]\?[.%]\?$" input_file.txt

如果您的意思是匹配出现在一行中各处的字符串,那么它会变得更加复杂,因为您在所需的匹配项(描述中的匹配项 (1.))中包含了纯单词 "Table1"。我会采用两步法。

首先获取所有包含 "Table1" 的行作为一个单词 (grep -w).
然后过滤掉(grep -v)所有你不想匹配的:

  $ grep -w "" input_file.txt |  
    grep -v "[^ .]\+" | 
    grep -v "[^.%]\+" 

或更紧凑:

 $ grep -w "" input_file.txt | grep -v "[^ .]\+\|[^.%]\+"  

结果:

Table1
 Table1
.Table1
Table1.
.Table1.
 Table1.
.Table1%
 Table1%

grep -v "[^ .]\+" : 表示过滤掉 (-v) 以至少一个字符开头而不是 "space" 或 "."

的先前匹配项

如果要匹配任何 "whitespace"(例如制表符)而不仅仅是普通文字 "space",请将上面 grep 模式中的文字 space " " 替换为 [:space:]