Как преобразовать 4 пробела в 2 пробела с помощью sed
? Является ли это возможным?
Я нашел это, но он конвертирует табуляцию в пробелы:
sed -r ':f; s|^(\t*)\s{4}|\1\t|g; t f' file
Размещенный вами скрипт преобразует 4 * n пробелов в n вкладок, только если этим пробелам предшествуют только вкладки.
Если вы хотите заменить 4 пробела на 2 пробела, но только с отступом, хотя это можно сделать с помощью sed, я рекомендую вместо этого Perl.
perl -pe 's{^((?: {4})*)}{" " x (2*length($1)/4)}e' file
В седе:
sed -e 's/^/~/' -e ': r' -e 's/^\( *\)~ /\1 ~/' -e 't r' -e 's/~//' file
Вы можете использовать indent
вместо этого.
Nested quantifiers in regex; marked by <-- HERE in m/^( {4}* <-- HERE )/ at -e line 1.
Разве простой способ не работает:
Если нет, опубликуйте информацию, если она не удалась.
источник
Если только начальные пробелы должны быть преобразованы:
С комментариями:
Также посмотрите на
'ts'
настройки и:retab
команды vimисточник
'ts'
и:retab
не являются решением вопроса, но связаны и могут помочь в достижении вашей общей цели. Вы можете сделатьvim -- *.c
,:set ts=...
а затем:argdo retab
или:argdo retab!
. Смотрите также'sw'
опцию и собственные возможности отступов vim.Он работает, разделяя ведущие пробелы на четыре экземпляра одной и той же группы (чтобы они все были равны), а затем заменяя их только двумя экземплярами группы.
источник
\+
). Спасибо.Это должно только сжать ведущие последовательности пробелов.
источник