Удалить текстовую строку с помощью findstr - PullRequest
0 голосов
/ 17 марта 2020

Я переместил файл, в котором есть строки, начинающиеся с указанного c текста, с помощью приведенного ниже кода.

До этого это было возможно, но я хочу удалить текст, за исключением строк с указанными только c текст,

но я не знаю, что делать.

for /f %%a in ('findstr /b /m "a" *.txt') do (
        move /y "%%~a" "D:change_text"
        )

Ниже приведен пример текста.

ex1)

b 0.d4g7a6 0.4g1h5s 0.b9g5r2 0.6s7d2f

a 0.6d7g1a 0.6g1g8a 0.6z4s6f 0.g7w2a7x

до

a 0.6d7g1a 0.6g1g8a 0.6z4s6f 0.g7w2a7x

ex2)

d 0.5g98 0.6b3n8 0.3s4q2a 0.s3z6d9f
a 1.6g2 0.5c9d4 0.1a7ge2z 0.1fe4sz6x
a 0.3q8t6e 0.5q8r6q 2.1a4zx9vs 0.1q2s6c
z 0.6p2o3t 0.e9 0.1q8s6z 0.v0s9d4f
a 0.7i6i1l 0.6u9q4 0.0c2v9 0.0z5s5d
a 0.9q3z 0.6s7d6f 0.0w3s9f 0.h0y1y8u

до

a 1.6g2 0.5c9d4 0.1a7ge2z 0.1fe4sz6x
a 0.3q8t6e 0.5q8r6q 2.1a4zx9vs 0.1q2s6c
a 0.7i6i1l 0.6u9q4 0.0c2v9 0.0z5s5d
a 0.9q3z 0.6s7d6f 0.0w3s9f 0.h0y1y8u

скажите мне свое мнение

Хорошо, чтобы рассказать на других языках.

1 Ответ

1 голос
/ 17 марта 2020

Ну, findstr только находит текст, но не удаляет текст из файла. Вы ищете файлы, которые содержат указанный c текст, а затем перемещаете их куда-то, поэтому вы пропускаете шаг, на котором текст фактически удаляется. Вы можете сделать это:

rem /* Search files that contain matching text and loop through them;
rem    since the `/M` option is specified the file names are returned;
rem    the search string `^a\>` searches the word `a` at the beginning
rem    of the line (`^`), `\>` constitutes a word boundary: */
for /F "delims= eol=|" %%F in ('findstr /M "^a\>" "*.txt"') do (
    rem /* Search the current file again but return the matching text this time;
    rem    write that text to another file using redirection (`>`);
    rem    if successful (`&&`), delete the current (original) file: */
    (> "D:\%%~F" findstr "^a\>" "%%~F") && del "%%~F"
)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...