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
文件中
假设我们有 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
文件中