我正在运行一个获得参数$1
我想在该参数之前找到所有以空格或.
开头的字符串。
并以.
或%
结尾
例如:
如果$1
是Table1,那么
1)"表1"
2)"表1"
3)" 。表1"
4)"表1 。"
5)" 。表1。"
6)"表1的 的&#34。
7)" 。表1%"
8)"表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:]