3

要删除文本文件每行末尾的选项卡,我会

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

但是标签仍然存在。

文件示例

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

在约翰·多伊、鲍勃·马特森……之后,它可能有一些标签。我想消除它们,以便我的输出文件(“result.txt”)不再有它们。

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

4

5 回答 5

4

当我遇到类似问题时,我使用了该more命令,它类似于 type 命令,除了参数。这是命令:

more /T0 [File name] > results.txt

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

希望这有帮助。

你的莫娜。

于 2013-06-25T06:33:20.173 回答
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
于 2013-06-25T07:29:04.097 回答
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
于 2013-06-25T07:08:30.277 回答
0

这不是一个通用的解决方案,但如果您确定文本本身没有任何选项卡(只有尾随和可能前导),您可以for /f直接从命令行使用:

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

这将从数据中删除任何前导/尾随制表符 -但如果您在文本中有任何制表符,也会导致行不完整!

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

于 2013-06-25T18:49:40.007 回答
0

这只不过是文本文件编辑的一种特殊情况。How can you find and replace text in a file using the Windows command-line environment提供了很多选项?

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

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

type "%~1"|repl "\t*$" "" >"%~1.new"
move /y "%~1.new" "%~nx1" >nul
于 2013-06-25T20:30:09.583 回答