我目前有一个文本文件(file.txt),如下所示:
String [date]
data1
String [another date]
data2
String [another date]
data3
我希望有一个批处理文件,只保留每个块第一行的字符串,知道每次的日期不同。以下是输出的示例:
String
data1
String
data2
String
data3
由于我有一个超过95,000行的文本文件,我想我必须搜索包含特定字符串的行,然后删除它们上的所有内容,除了研究的字符串。
答案 0 :(得分:0)
字符串操作是批处理文件一直很糟糕的一件事。最干净的方法是使用了解正则表达式和字符串搜索/替换的工具。例如,使用GNU Sed:
sed -e s/^String.*$/String/g file.txt > output.txt
或使用Windows附带的PowerShell
powershell -noprofile -C "gc 'file.txt' | % { $_ -replace 'String.*','String' } | sc output.txt"
这个特殊问题并不需要正则表达式的全部功能,可以批量完成。脚本逐行遍历文件。对于每一行,如果它以" String"开头,那么写" String"输出;否则写下原来的一行。
copy nul output.txt
for /f "tokens=1* delims=:" %%a in ('findstr /n "^" file.txt') do call :do_line "%%b"
goto :eof
:do_line
set line=%1
if {%line:String =%}=={%line%} (
echo.%~1 >> output.txt
goto :eof
)
echo string >> output.txt
脚本的第一行使用来自this thread的技巧来保留空行。它的缺点是,如果原始文件中的任何行以:
开头,则冒号将被剥离。