0

我的输入文件中有以下两行。

示例输入文件(文件名 - file.txt)

String1   value   'string2'
..
..
..
Call  string1 

期望的输出: File.txt。(即文件名)

基本上我想要文件的名称 - 如果它包含这两行 1) string1 value 'string2' 2)call string1

上面的 1) 和 2) 是两条不同的线,中间可能有很多线。

PS a) 我正在寻找'string2'. 'string1'可以是任意 8 个字符。我不知道'string1' b)'string2'将始终在单引号 (') c)'string2'将始终以字符串开头'value'

谢谢

4

2 回答 2

1

尝试这个...

 gc input.txt |?{$_ -match '.*value ''(.*)'''}|%{$matches[1]}
于 2013-06-22T12:00:24.513 回答
0

下面的脚本遍历当前目录中的每个文件,并查找内容中包含 2 行的文件。不确定这是否符合您的情况,但根据您的环境定制它并不难。

dir *.* | foreach {if (get-content $_| Select-String -pattern  "^[A-Za-z]{8} value 'string2'","Call string1") {"$_"}}

输出(在我的实验室中)是:

C:\Documents\ManualScripts\test.txt

test.txt 是我为测试这个脚本而创建的文件。内容如下:

abcdefgh value 'string2'
hello world
I love church
I love Jesus
call string1
Alibaba, sesame open the door!

对于@dazedandconfused,我相信您的脚本返回“String1”,它是第二行的一部分,而不是他/她请求的文件名。此外,您的脚本没有反映他/她的另一个需求:“'string1' 可以是任何 8 个字符”。如果我错了,请原谅我。

于 2013-06-23T00:22:21.280 回答