У меня есть много файлов с закрытыми вкладками, и я хотел бы преобразовать их в пробелы. Я знаю о expand
команде, но, к сожалению, мне пришлось бы печатать каждый файл, используя ее. Есть ли более простой способ сделать это в Linux?
linux
text-editing
человек
источник
источник
expand
, я предполагаю, что он / она хочет сохранить выравнивание текста.'s/\t/ /g'
заменить более одной вкладки на строку.find ./ -type f -exec sed -i ’s/\t/ /g’ {} +
" (то есть "+
" вместо "\;
"), еслиfind
версия поддерживает это (и я лично не встречал ни одной версии, которая не делает, но это не стандарт POSIX , поэтому я думаю, что это может произойти в некоторых системах. Смотрите "-exec command {} +
" в руководстве). Вместо того, чтобы запускать один экземплярsed
для каждого файла, это создаст список аргументов с таким количеством аргументов имени файла, которое поддерживает система (getconf ARG_MAX
= 2097152 в моей системе), иxargs
, таким образом, запустит гораздо меньшеsed
процессов.sed
не понимает\t
escape-последовательность вкладки. Вы можете заменить его буквальным символом табуляции, который вы можете ввести в оболочке[Ctrl]+V, [Tab]
.expand
вероятно, лучше, чемsed
для этого, как объяснено в: stackoverflow.com/a/11094620/131824Есть много способов сделать это. Есть также много способов выстрелить себе в ногу, делая это, если вы неосторожны или если вы новичок в Linux, как кажется. Предполагая, что вы можете создать список файлов, которые вы хотите преобразовать, используя что-то подобное
find
или вручную с редактором, просто передайте этот список в следующий список.Один из способов, которым вы можете выстрелить себе в ногу, - это сделать опечатку так, чтобы вы добавили пустой файл ко всем указанным вами именам файлов, тем самым удалив содержимое всех ваших файлов. Поэтому будьте осторожны и тестируйте все, что вы делаете в первую очередь, на небольшом наборе файлов, для которого вы создали резервную копию.
источник
mv
условие успехаexpand
:expand ... && mv ...
expand -t 4
расширить вкладки до 4 пробелов. Кроме того, этот метод может создавать завершающие строки. Но в остальном это работает.-I foo
создает переменную шаблона foo для каждой строки ввода, поэтому вы можете ссылаться на нее несколько раз.-print0
и-0
скажите обеим командам использовать \ 0 в качестве разделителя строк вместо SPACE, чтобы эта команда работала для путей с пробелами.источник
Минусы:
файлы, размер которых превышает размер буфера канала ( 64 КБ ), усекаются
Плюсы:
никакие временные файлы,
файлы которых больше, чем размер буфера канала, не усекаются
источник
Это лучше:
источник
/tmp/e
потому что, если что-то еще использует этот файл, это испортит его. Например, если два пользователя хотели использовать это одновременно.Я решил эту проблему с учетом следующих требований:
Последнее требование было самым трудным для выполнения, потому что «расширение» не позволяет изменять файлы на месте.
Я придумал следующее решение:
Вот некоторые объяснения:
источник