Grep字符串以。开头。或空白

时间:2015-06-09 16:35:37

标签: bash grep prefix

我正在运行一个获得参数$1

的脚本

我想在该参数之前找到所有以空格或.开头的字符串。 并以.%结尾
例如:

如果$1是Table1,那么

1)"表1"
2)"表1"
3)" 表1"
4)"表1 "
5)" 表1。"
6)"表1的 的&#34。
7)" 表1%"
8)"表1%"

应该是好的

1 个答案:

答案 0 :(得分:0)

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

如果通过“查找所有字符串”表示“整行”,则非常简单:

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

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

首先将包含“Table1”的所有行作为单词(grep -w) 然后过滤掉(grep -v)您不想匹配的所有内容:

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

或更紧凑:

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

结果:

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

grep -v "[^ .]\+$1":表示过滤掉(-v)之前的匹配项,以“space”或“。”以外的至少一个字符开头。

如果您想匹配任何“空格”(例如制表符)而不仅仅是公共文字“空格”,请将上面的grep模式中的文字空间“”替换为[:space:]