我用findstr
成功地设法查找一长串文件中的string。 我将findstr
的输出redirect到不同的文本文件,但是我需要摆脱包含源文件引用的输出行的起始部分。 基地就是下面的例子
echo testtest > testing.txt findstr 'test' *.txt > output.txt //output is 'testing.txt:testtest'
我需要做这样的事情
echo testtest > testing.txt findstr 'test' *.txt | *something* > output.txt //output is 'testtest'
警告:
我只能使用标准的CMD命令,我不能在目标机器上安装新的软件
像这样的东西应该工作:
@echo off for /f "delims=: tokens=1*" %%i in ('findstr "test" *.txt') do ( echo %%j ) >> output.txt
请注意,所有输入文件都必须有换行符,否则当前文件的第一个匹配可能会被附加到前一个文件的最后一个匹配,如果匹配在最后一行:
testtestFOO.TXT:something test other
这是一个解决Ansgar Wiechers在答案中确定的CR / LF问题的解决方案。
我使用FOR循环遍历所有文件,并在每个文件上运行FINDSTR。 我在每个文件之间回显一个空行。 最后,我再使用一个FINDSTR删除任何不需要的空白行。
@echo off >"output.txt" ( for %%F in (*.txt) do ( findstr "test" "%%F" (echo() ) ) findstr . "output.txt" >"output.txt.new" move /y "output.txt.new" "output.txt" >nul type output.txt
您应该使用PowerShell( powershell.exe
)来开发您需要的脚本。 命令行提供的文档是非常有说服力的:
PS > help about
如果您需要更多: 是否有一个PowerShell语言参考手册?
在Linux系统上,可以像下面的命令一样使用awk
:
cat output.txt | awk 'match($0,":"){print substr($0,RSTART+1)}'