У меня есть папка с множеством файлов. Я хочу зайти в каждый файл и экспортировать строки длиной более 80 символов.

я использую

grep '.\{80\}' filename > newfilename

Но я хочу сделать это для всех файлов в каталоге одновременно. Как я могу сделать это, чтобы у меня было такое же количество файлов?

1 ответ1

1

Согласно этому ответу sed может фильтровать строки по их длине:

sed -e '/.\{120\}/!d'

[…] Соответствует строкам, которые не содержат (как минимум) 120 символов (! после выражения выполнить команду в строках, которые не соответствуют шаблону до него), и удалить их (т. е. не печатать их).

sed -i работает на месте. Это приводит к следующему подходу:

cp -a original_dir/ modified_dir/
find modified_dir/ -type f -exec sed -i -e '/.\{80\}/!d' {} +

Теперь каждый файл из original_dir/ имеет свою модифицированную версию modified_dir/ .

В качестве альтернативы вы можете работать полностью внутри original_dir/ , говоря sed сохранять старые файлы с суффиксом:

find original_dir/ -type f -exec sed -i.old -e '/.\{80\}/!d' {} +

В этом случае, если вы используете -i вместо -i.old , старые файлы будут потеряны.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .