Findstr /g with token 或 delim

Findstr /g with token or delim

假设我们有 2 个文件

First.txt

123
456

和Second.txt

789;123
123;def
482;xaq

我需要的是在第二个文件中找到仅包含第一列中第一个文件条目的行(标记 1,delim ;)。 这就是我需要的:

Output.txt

123;def

当然,

findstr /g:first.txt second.txt

将输出两行:

789;123
123;def

知道如何混合使用 findstr 和 for /f 以获得所需的输出吗? 谢谢!

是 CSV 的通用格式。批次 %A 中的注释变为 %%A。

for /f "delims=," %A in (csv.txt) do findstr /c:"%A" file2.txt

这是输出

C:\Users\User>for /f "delims=," %A in (csv.txt) do findstr /c:"%A" csv1.txt

C:\Users\User>findstr /c:"55" csv1.txt
55,61,hi there, Good

C:\Users\User>findstr /c:"60" csv1.txt
54,60,hi there, Bad

C:\Users\User>findstr /c:"Bad" csv1.txt
54,63,hi there, Bad
54,60,hi there, Bad

C:\Users\User>findstr /c:"55" csv1.txt
55,61,hi there, Good

两个文件的内容。

55,60
60,60
Bad,60
55,60

55,61,hi there, Good
54,62,hi there, Good
54,63,hi there, Bad
54,60,hi there, Bad

您可以利用 findstr 超级有限的正则表达式功能,并将 first.txt 的每一行与 second.txt.[=18 的每一行的开头进行比较=]

@echo off
for /F %%A in (first.txt) do findstr /R /C:"^%%A;" second.txt

/R 标志表示搜索字符串应被视为正则表达式。搜索字符串中的 ^ 表示 %%A 出现在该行的最开头。 ; 是一个文字分号,它将阻止 123 行在 second.txt.

中获取 1234;abcd

如果第一列中的所有元素都具有相同的长度,那么简单的答案就是

findstr /b /g:first.txt second.txt

但是请注意,如果 first.txt 包含一行 12 那么这将匹配第二行中的 123;abc and 129;pqr文件。

无需为每个值执行单独的 findstr 并避免行首部分匹配的问题,您可以尝试使用

@echo off
    setlocal enableextensions disabledelayedexpansion

    ( cmd /q /c"(for /f "delims=" %%a in (first.txt) do echo(%%a;)" 
    ) | findstr /g:/ /l /b second.txt

它所做的是读取 first.txt 并用分隔符回显每一行。此输出由 findstr 使用 /g:/ 检索,以使用标准输入作为要匹配的元素的源,这将被视为行首的文字 (/l) (/b) 在 second.txt 文件中