我想从文本文件中删除空白行。我只是试图找到一个findstr
命令行开关来找到解决方案,但我无法让它工作。这是我的文件:
test2.html:
<script src="common/latest_updates/angular-slider.js"></script>
<script src="common/latest_updates//angular-list-group.js"></script>
blank space
<script src="common/latest_updates/jstree/jstree.js"></script>
<script src="common/latest_updates/jstree/ngJsTree.js"></script>
blank space
<script src="common/d3/ngFunnel.js"></script>
脚本:
findstr /r /v "^$" test2.html >> test3.html
答案 0 :(得分:2)
我看到你的FINDSTR命令没有提供你想要的结果的两个可能原因。
<LF>
结尾,而不是Windows <CR><LF>
标准。 $
锚仅匹配<CR>
之前的位置,因此它永远不会匹配使用unix行结尾的任何行。有关详细信息,请参阅What are the undocumented features and limitations of the Windows FINDSTR command?。
我将使用以下内容仅匹配包含至少一个非空白字符的行。请注意,<tab>
表示硬编码制表符,而不是字符串文字。
findstr /rc:"[^ <tab>]" test2.html >test3.html
如果在控制台会话中启用了文件完成,则从命令行输入<tab>
可能会有点问题。按[TAB]键将尝试完成文件名。解决问题的方法是按住[ALT]键并按键盘[9]键,然后松开。输入行中可能会出现一个有趣的字符,但正确的<tab>
值将被输入FINDSTR。
如果您使用批处理脚本,那么输入<tab>
字符应该没有问题,除非您的文本编辑器将制表符转换为空格。
答案 1 :(得分:1)
这将遍历源文件test2.html
,并仅打印非空行。结果将写入目标文件test3.html
。
@echo off
set "source=test2.html"
set "dest=test3.html"
1>"%dest%" (
for /f "tokens=1,* delims=:" %%i in ('findstr /n "^" "%source%"') do (
if not "%%j" == "" (
echo;%%j
)
)
)
为了处理与仅包含空格的行相同的空行,需要更多的摆弄,但应该可以通过在正确的时间打开和关闭延迟扩展来实现。
使用以下代码克服jeb提到的问题,即能够处理行::::: comment
或/?
。感谢dbenham的回复here。
@echo off
setlocal disabledelayedexpansion
set "source=test2.html"
set "dest=test3.html"
1>"%dest%" (
for /f "delims=" %%e in ('findstr /n "^" "%source%"') do (
set "line=%%e"
setlocal enabledelayedexpansion
set "line=!line:*:=!"
if not "!line!" == "" (
echo(!line!
)
endlocal
)
)
答案 2 :(得分:0)
这会处理空行。您的帖子不清楚指示的行是否包含空格。如果指示的行包含空格或制表符等空格,则会更复杂。
@echo off
if exist test3.html del test3.html
for /f "tokens=1*" %%a in (Test2.html) do (
rem If adding a space to the line does not result in a line with only 1 space, output it.
if not "%%a "==" " (
echo %%a%%b>>test3.html
)
)
start "test" notepad.exe test3.html
exit /b