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:]
我是 运行 一个获取参数的脚本 </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:]