shell 如何使用特定模式对字符串进行grep

hujrc8aj  于 2023-01-09  发布在  Shell
关注(0)|答案(2)|浏览(173)

我正在尝试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

请说明是否有任何其他办法来实现这一目标。

vc9ivgsu

vc9ivgsu1#

更具体地说:

grep -P '^cp\s+.+\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位数字。
[.]:文本点(.)。请注意,正则表达式中的普通.表示任何字符,除非它位于字符类中([.])或转义(\.)。
$:行的末尾。

    • 另见:**

GNU grep manual
perlre - Perl regular expressions

kognpnkq

kognpnkq2#

像这样,使用GNU grep

grep -P 'cp.*TC_12_IT_\d{6}_\d{6}TC_12_TEST\d{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测试”|
| \d{2}|数字(0-9)(2次)|
| .|除\n之外的任何字符|
| tc12|“tc12”|
| x1米11米1x|除\n之外的任何字符|
| tc12|“tc12”|

相关问题