sed преобразовывают 4 пробелов в 2

Можно выполнить графический браузер (например, Firefox), это отображается в виртуальном X-сервере (Xvfb). Посмотрите, Как я могу запустить Firefox на Linux невнимательно (т.е. не требуя libgtk-x11-2.0.so.0)?, и возможно также, Как я запускаю Xvfb на запуске на Debian?.

Elinks является браузером текстового режима с дополнительной поддержкой JavaScript. Версия в Ubuntu 8.04 компилируется без поддержки JS, таким образом, необходимо было бы скомпилировать собственное и связать ее с библиотекой Mozilla SpiderMonkey JavaScript. Эти инструкции в руководстве могут помочь.

14
05.09.2012, 02:31
5 ответов

Сценарий, который Вы отправили, преобразовывает 4*n пробелы в n вкладки, только если тем пробелам предшествуют только вкладки.

Если Вы хотите заменить 4 пробелов 2 пробелами, но только в добавлении отступа, в то время как возможно сделать это с sed, я рекомендую Perl вместо этого.

perl -pe 's{^((?: {4})*)}{" " x (2*length($1)/4)}e' file

В sed:

sed -e 's/^/~/' -e ': r' -e 's/^\( *\)~    /\1  ~/' -e 't r' -e 's/~//' file

Можно хотеть использовать indent вместо этого.

13
27.01.2020, 19:50
  • 1
    я добрался Nested quantifiers in regex; marked by <-- HERE in m/^( {4}* <-- HERE )/ at -e line 1. –  eddygeek 29.03.2017, 14:25
  • 2
    @eddygeek, О, действительно, это и несколько других ошибок. Я заменил напыщенность речи фактическим кодом жемчуга. –  Gilles 'SO- stop being evil' 29.03.2017, 20:23

Не делает простого пути работа:

sed -r 's/ {4}/  /g'

В противном случае отправьте некоторый вход, где он перестал работать.

5
27.01.2020, 19:50
  • 1
    Это не resticted к началу строки. При привязке его там это не будет работать на несколько соответствий. Таким образом, мы по unix.stackexchange.com/a/375200/259620 ниже. –  geek-merlin 08.11.2017, 21:31

Если только продвижение пробелов должно быть преобразовано:

sed 'h;s/[^ ].*//;s/    /  /g;G;s/\n *//'

С комментариями:

sed '
  h; # save a copy of the pattern space (filled with the current line)
     # onto the hold space
  s/[^ ].*//; # remove everything starting with the first non-space
              # from the pattern space. That leaves the leading space
              # characters
  s/    /  /g; # substitute every sequence of 4 spaces with 2.
  G; # append a newline and the hold space (the saved original line) to
     # the pattern space.
  s/\n *//; # remove that newline and the indentation of the original
            # line that follows it'

Также взгляд на энергию 'ts' установка и :retab команда

4
27.01.2020, 19:50
  • 1
    Используя Ваше решение для энергии, есть ли способ обработать в пакетном режиме, редактируют несколько файлов как этот с энергией? Иначе я предполагаю, что должен был бы создать макрос? –  chrisjlee 10.09.2012, 18:03
  • 2
    Отметьте это 'ts' и :retab не решения вопроса, но связаны и могут помочь обратиться к Вашей полной цели. Можно сделать vim -- *.c, :set ts=... и затем :argdo retab или :argdo retab!. См. также 'sw' опция и собственные возможности расположения с отступом энергии. –  Stéphane Chazelas 10.09.2012, 18:15
sed 's/    \{2,4\}\( \{0,1\}[^ ].*\)*/  \1/g' <input

Это должно только сжимать ведущие последовательности пробелов.

1
27.01.2020, 19:50
sed 's/^\( \+\)\1\1\1/\1\1/' file

Он работает, разделяя ведущие пробелы на четыре экземпляра одной и той же группы (, чтобы они все были равны ), а затем заменяя их только двумя экземплярами группы.

2
27.01.2020, 19:50

Теги

Похожие вопросы