我试图grep file.txt搜索2字符串cp和(目标文件名),其中文件中的行如下,
cp (source file name) (target file name)
我这里的问题是字符串'(目标文件名)'具有特定的模式为/path/to/file/TC_12_IT_(6位数)_(6位数)_TC_12_TEST_(2位数)。tc12.tc12
我使用下面的grep命令搜索一行与这两个字符串,
grep -E cp.*/path/to/file/TC_12_IT_ file.txt
我怎样才能更具体地在grep命令中搜索(目标文件名)及其所有模式,如下所示,
grep -E 'cp.*/path/to/file/TC_12_IT_*_*_TC_12_TEST_*.tc12.tc12' file.txt
我们可以在grep中使用通配符来搜索文件中的字符串吗?就像我们可以使用通配符*来列出文件一样,例如
ls -lrt TC_12_*_12345678.txt
请建议是否有其他方法来实现这一点。
具体来说:
grep -P '^cps+.+s+S+/TC_12_IT_d{6}_d{6}_TC_12_TEST _d2[.]tc12[.]tc12$' in_file > out_file
^
:行首。s+
: 1个或多个空白字符。.+
: 1个或多个任意字符。S+
: 1个或多个非空白字符。d{6}
:正好6位。[.]
:文字点(.
)。请注意,正则表达式中的普通.
意味着任何字符除非它在字符类([.]
)或转义(.
)中。$
:行尾。
参见:
GNUgrep
手册
Perl正则表达式
像这样,使用GNUgrep
:
grep -P 'cp.*TC_12_IT_d{6}_d{6}TC_12_TESTd{2}.tc12.tc12' file
正则表达式匹配如下:
节点 | 说明 | cp | cp的 |
---|---|
.* | 除n以外的任何字符(0次或更多次(匹配可能的最大次数)) |
TC_12_IT_ | 'TC_12_IT_' |
d{6} | 数字(0 - 9)(6次) |
_ | _ |
d{6} | 数字(0 - 9)(6次) |
TC_12_TEST | 'TC_12_TEST' |
d{2} | 数字(0 - 9)(2次) |
. | 除n外的任意字符 |
tc12 | 'tc12' |
. | 任何字符,除了n |
tc12 | 'tc12' |