Удалить строку из всех файлов в папке со строкой «Генерация» - PullRequest
0 голосов
/ 26 октября 2018

Я хочу удалить строку со строкой 'Generation' во всех файлах в папке с именем KCG.Я попробовал следующее в командной строке Windows:

sed -i '/Generation/d' file

, но получил следующее сообщение об ошибке:

sed: can't read file: No such file or directory

Далее я попытался:

sed -i '/Generation/d' airport_related_altitudes_derived_data.c

Это сработало, но я не хочу вводить имена файлов всех файлов в папке каждый раз.Есть ли команда для рекурсивного поиска строки во всех файлах в папке?

Ответы [ 2 ]

0 голосов
/ 30 октября 2018

A способ Windows для перечисления файлов шаблона / типа файла в текущей папке.

@Echo off
For %%A in (*.c) Do sed -i '/Generation/d' %%A

Рекурсивно с начального пути

For /r "X:\start\path" %%A in (*.c) do sed -i '/Generation/d' %%A

Чистый пакетный способ удаления строк, содержащих слова из файла, использует find /v или findstr /v, но требует другого имени выходного файла, без редактирования на месте.

@Echo off
for %%A in (*.c) do findstr /vi "Generation" "%%~A" >"%%~dpnA_new%%~xA"

что создает новые файлы с добавлением _new перед расширением.

Конечно, возможно переименовать старую версию в .bak и записать измененную версию в исходное имя.

0 голосов
/ 26 октября 2018

Попробуйте это:

find . -type f -exec sed -i '/Generation/d' {} \;

Это рекурсивно найдет все файлы ("-type f") в текущем каталоге (".") И вызовет "sed -i '/ Generation / d'" для каждого файла ("{}").

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...