2013-06-25 5 views
3

Чтобы удалить вкладку в конце каждой строки текстового файла, яудалить вкладку в конце каждой строки файла

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

Но закладка еще есть.

файл Пример

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

После того как Джон Доу, Боб Materson, ..., он может иметь некоторые вкладки. Я хочу их устранить, чтобы у моего выходного файла («result.txt») их больше нет.

Имея поиск в строке, я вижу, что для выполнения этой команды можно использовать команду «sed», но я бы не хотел ее устанавливать на ПК. Поэтому, если есть решение, которое не использует его, я действительно хочу поблагодарить вас в ожидании.

ответ

3

, когда у меня была аналогичная проблема, я использовал команду more, которая аналогична команде типа, за исключением параметров. Вот команда:

more /T0 [File name] > results.txt 

Если /T0 указывает преобразовать каждую вкладку в 0 пространств, по существу, избавиться от них. Обратите внимание, что это избавит вас от каждой вкладки в TXT-файле.

Надеюсь, это помогло.

Ваш Мона.

+0

я попробовал либо более +5/T0 «~ 1»> results.txt или более/T0 +5 "~ 1"> results.txt; Но Tab все еще присутствует в конце строк. Я должен использовать больше +5, чтобы пропустить некоторые строки). Спасибо – new

+1

Хорошо. Я сам пробовал этот код, и он отлично работал, поэтому никаких проблем и вам нужно искать что-то еще. 'type [имя файла] | больше/T0 +5> results.txt'. Ваша Мона. – Monacraft

+0

Это аккуратное решение, но просто имейте в виду, что на каждой линии 64K БОЛЬШЕ пауз для ввода пользователем. Если ваш файл меньше, чем в строках, то проблем нет. – foxidrive

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 
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 
+0

++ 1, очень интересно, почему он не удаляет конечные пробелы, только (все) трейлинг-вкладки? – Endoro

0

Это не общее решение, но если вы уверены У вас нет вкладок в тексте сам (только задний и, возможно, ведущий), вы можете использовать for /f непосредственно из командной строки:

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

Это лишит любой ведущий/ведомую вкладку из данных - , но если у вас есть какая-либо вкладка в тексте, это также приведет в неполных линиях!

Характер после delims= потребности быть актуальной Tab (не копировать/вставить здесь, либо подготовить в редакторе или запустить CMD с /f:off переключателем, чтобы избежать табуляцию).

0

Это не более чем частный случай редактирования текстового файла. Существует множество опций, представленных в How can you find and replace text in a file using the Windows command-line environment?

Мой любимый вариант - это гибридная утилита JScript/Batch, называемая REPL.BAT, которая предоставляет функции поиска и замены регулярного выражения для пакетного программирования и командной строки. Скрипт не требует установки какого-либо стороннего исполняемого файла, и он совместим с любой современной платформой Windows с XP и далее.

Если у вас есть REPL.BAT либо в вашем PATH, либо в текущем каталоге, то все, что вам нужно:

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