从文本文件中删除空白行

时间:2017-07-10 13:19:22

标签: batch-file

我想从文本文件中删除空白行。我只是试图找到一个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

3 个答案:

答案 0 :(得分:2)

我看到你的FINDSTR命令没有提供你想要的结果的两个可能原因。

  • 空行可能不是空的,而是可能包含空格和/或制表符。显然你的正则表达式与包含空格的行不匹配。
  • 该文件可能具有unix格式(行以<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