Решение:
sed -i '' 's/ :(float)//g' *
sed -i '' 's/[chuck]: cleaning up...//g' *
Объяснение:
Я могу получить:
sed -ie 's/ :(float)//g' *
для работы, но при этом создаются файлы, в которых хранятся старые файлы.
Это потому, что флаг sed
i
должен работать таким образом
-i расширение
Редактировать файлы на месте, сохраняя резервные копии с указанным расширением . Если задано расширение нулевой длины , резервная копия не будет сохранена.
В этом случае e
интерпретируется как расширение , с которым вы хотите сохранить резервные копии. Таким образом, все ваши исходные файлы будут скопированы с добавлением e
к их именам.
Чтобы обеспечить расширение нулевой длины, вам нужно использовать -i ''
.
Примечание : В отличие от -i<your extension>
, -i''
не будет работать. Вам нужно иметь пробел между -i
и ''
, чтобы он работал.
Снятие флага -e приводит к неопределенной ошибке шаблона замены.
При удалении e
сразу после -i
, т.е.
sed -i 's/ :(float)//g' *
s/ :(float)//g
теперь будет интерпретироваться как аргумент extension для флага i
. И первый файл в списке файлов, созданный расширением оболочки *
, интерпретируется как sed function
(наиболее вероятно, s/regular expression/replacement/flags
функция). Вы можете проверить это, проверив вывод
* ** 1079 1080 *
Если вывод приведенной выше цепочки команд 0
, наше предположение подтверждается.
Также в этом случае, если каким-то образом первое имя файла квалифицируется как допустимая функция s/regular expression/replacement/flags
sed, остальные имена файлов будут интерпретироваться как обычные файлы для работы с sed.