Это проблема из 2 частей.Шаг 1 предоставляет правильную команду sed, 2 предоставляет правильную команду для замены всех файлов в данном каталоге.
Подстановка в командах sed имеет вид s/ItemToReplace/ItemToReplaceWith/pattern
, где s
обозначает замену иpattern
обозначает, как должна выполняться операция. Согласно этому сообщению суперпользователя , для совпадения пробельных символов вы должны использовать либо \s
, либо [[:space:]]
в вашей команде sed.Разница в том, что позже - для соответствия POSIX.Наконец, вам нужно указать глобальную операцию, которая просто / g в конце.Это просто заменяет все пробелы в файле подчеркиванием.Подстановка в командах sed имеет вид s/ItemToReplace/ItemToReplaceWith/pattern
, где s
обозначает замену, а pattern
обозначает, как должна выполняться операция. Согласно этому сообщению суперпользователя , для сопоставления пробельных символов вы должны использовать либо просто пробел в вашей команде sed, \s
, либо [[:space:]]
.Разница между последними двумя значениями заключается в перехвате пробелов (табуляции и пробелов), причем последнее необходимо для соответствия POSIX.Наконец, вам нужно указать глобальную операцию, которая просто / g в конце.
Следовательно, ваша команда sed -
Однако это выполняет только половину вашей задачи.Вы также должны быть в состоянии сделать это для каждого файла в каталоге.К сожалению, подстановочные знаки не спасут нас в команде sed, так как * > *
будет неоднозначным.Ваше единственное решение - перебирать каждый файл и перезаписывать их по отдельности. Для циклов по умолчанию должен быть предусмотрен синтаксис итерации файлов , а при использовании с подстановочными знаками распространяется на все файлы в каталоге.Однако sed, используемый таким образом, похоже, полностью теряет вывод при перенаправлении в файл.Чтобы исправить это, вы должны указать sed с флагом -i
, чтобы он редактировал свои файлы.Любой элемент, который вы передадите после флага -i
, будет использован для создания резервной копии старых файлов.Если расширение не передано (например, -i ''
), резервное копирование не будет создано.
Поэтому последняя команда должна быть просто
, которая ищет все файлы в текущем каталоге и выводитВывод sed во все файлы (каталоги отображаются в списке, но с ними не происходит никаких действий).