删除文件每行末尾的选项卡

时间:2013-06-25 06:20:31

标签: regex windows batch-file cmd findstr

要删除文本文件每行末尾的标签,我会

findstr /r /v /c:"[ ]$" "~1">result.txt

但是标签仍在那里。

文件示例

  John Doe
  Bob Materson
  ..........

在John Doe,Bob Materson ......之后,它可能有一些标签。我想消除它们,以便我的输出文件(“result.txt”)不再存在它们。

在线搜索,我发现可以使用'sed'命令执行它,但我不想在PC上安装它。因此,如果有一个不使用它的解决方案,我真的希望感谢你的预期。

5 个答案:

答案 0 :(得分:3)

当我遇到类似的问题时,我使用了more命令,这与命令类似,除了参数。这是命令:

more /T0 [File name] > results.txt

/T0指定将每个制表符转换为0个空格,基本上将其删除。 请注意,这将删除.txt文件中的每个选项卡。

希望这有帮助。

你的莫娜。

答案 1 :(得分:2)

@echo off
rem Insert an EndOfFile mark in original file (choose one good for you):
echo :EOF:>> file.txt
call :CopyLines < file.txt > result.txt
goto :EOF

:CopyLines
   set line=
   set /P line=
   if "%line%" equ ":EOF:" exit /B
   echo(%line%
goto CopyLines

答案 2 :(得分:1)

检查行尾的tab并删除它是否存在:

@echo OFF &SETLOCAL
FOR /f "delims=" %%i  IN ('findstr /n "^" file') DO (
    SET "line=%%i"
    SETLOCAL ENABLEDELAYEDEXPANSION
    SET "line=!line:*:=!"
    ECHO(%%i|FINDSTR /r /c:".*  $" >NUL && ECHO(!line:~0,-1! || ECHO(!line!
    REM      this is a <tab>--^
    ENDLOCAL
)

你应该更好地使用GNU sed

sed s/\t$// file

答案 3 :(得分:0)

这不是一般解决方案,但如果您确定文本中没有任何标签本身(仅限尾随和可能领先),您可以直接使用for /f命令行:

for /f "delims=       " %L in (file.txt) do @echo %L >result.txt

这会从数据中删除所有前导/尾随标签 - 但如果文字中有任何标签,则也会导致行不完整!

delims=之后的字符需要是实际 Tab (不要从这里复制/粘贴,要么在编辑器中准备,要么使用/f:off启动cmd以避免标签扩展)

答案 4 :(得分:0)

这只不过是文本文件编辑的特例。 How can you find and replace text in a file using the Windows command-line environment?

提供了很多选项

我最喜欢的选项是名为REPL.BAT的混合JScript / Batch实用程序,它为批处理编程和命令行提供正则表达式搜索和替换功能。该脚本不需要安装任何第三方可执行文件,并且与XP以后的任何现代Windows平台兼容。

假设您在PATH或当前目录中有REPL.BAT,那么您只需要:

type "%~1"|repl "\t*$" "" >"%~1.new"
move /y "%~1.new" "%~nx1" >nul